回答:
基本的な質問に対して、次のトリックを実行します(タスクバーを非表示にします)
private void Form1_Load(object sender, EventArgs e)
{
this.TopMost = true;
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
}
しかし、興味深いことに、最後の2行を入れ替えても、タスクバーは表示されたままです。これらのアクションのシーケンスをプロパティウィンドウで制御するのは難しいと思います。
私はSOや他のいくつかのサイトでこの質問に対する回答を探していましたが、1つは非常に複雑な回答を与え、他の回答は単に正しく機能しなかったため、多くのコードテストの後にこのパズルを解決しました。
注:Windows 8を使用していて、タスクバーが自動非表示モードになっていない。
変更を行う前にWindowStateをNormalに設定すると、カバーされていないタスクバーでエラーが停止することを発見しました。
2つのメソッドを持つこのクラスを作成しました。最初のメソッドは「フルスクリーンモード」に入り、2番目のメソッドは「フルスクリーンモード」を離れます。したがって、このクラスのオブジェクトを作成し、フルスクリーンを設定するフォームを引数としてEnterFullScreenModeメソッドまたはLeaveFullScreenModeメソッドに渡すだけです。
class FullScreen
{
public void EnterFullScreenMode(Form targetForm)
{
targetForm.WindowState = FormWindowState.Normal;
targetForm.FormBorderStyle = FormBorderStyle.None;
targetForm.WindowState = FormWindowState.Maximized;
}
public void LeaveFullScreenMode(Form targetForm)
{
targetForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
targetForm.WindowState = FormWindowState.Normal;
}
}
private void fullScreenToolStripMenuItem_Click(object sender, EventArgs e)
{
FullScreen fullScreen = new FullScreen();
if (fullScreenMode == FullScreenMode.No) // FullScreenMode is an enum
{
fullScreen.EnterFullScreenMode(this);
fullScreenMode = FullScreenMode.Yes;
}
else
{
fullScreen.LeaveFullScreenMode(this);
fullScreenMode = FullScreenMode.No;
}
}
私はこれと同じ答えを別の質問に配置しましたが、これがこれと重複しているかどうかはわかりません。(他の質問へのリンク:Windowsフォームをタスクバーの上に全画面で表示する方法は?)
targetForm.WindowState = FormWindowState.Normal;
フルスクリーンを離れる最初にも設定しなければなりませんでした。これは、ユーザーが最大化されたウィンドウから全画面表示になるケースを処理するためのものです。
次のコードを使用して、システム画面に合わせてタスクバーを表示できます。
private void Form1_Load(object sender, EventArgs e)
{
// hide max,min and close button at top right of Window
this.FormBorderStyle = FormBorderStyle.None;
// fill the screen
this.Bounds = Screen.PrimaryScreen.Bounds;
}
使用する必要はありません:
this.TopMost = true;
その行はalt+tab
、他のアプリケーションに切り替えるために干渉します。(「TopMost」は、「TopMost」とマークされていない限り、ウィンドウが他のウィンドウの上に留まることを意味します。)
私は最近Mediaplayerアプリケーションを作成し、API呼び出しを使用して、プログラムがフルスクリーンで実行されているときにタスクバーが非表示になっていることを確認し、プログラムがフルスクリーンでないか、フォーカスがないか、終了したときにタスクバーを復元しました。
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Integer, ByVal nCmdShow As Integer) As Integer
Sub HideTrayBar()
Try
Dim tWnd As Integer = 0
Dim bWnd As Integer = 0
tWnd = FindWindow("Shell_TrayWnd", vbNullString)
bWnd = FindWindowEx(tWnd, bWnd, "BUTTON", vbNullString)
ShowWindow(tWnd, 0)
ShowWindow(bWnd, 0)
Catch ex As Exception
'Error hiding the taskbar, do what you want here..
End Try
End Sub
Sub ShowTraybar()
Try
Dim tWnd As Integer = 0
Dim bWnd As Integer = 0
tWnd = FindWindow("Shell_TrayWnd", vbNullString)
bWnd = FindWindowEx(tWnd, bWnd, "BUTTON", vbNullString)
ShowWindow(bWnd, 1)
ShowWindow(tWnd, 1)
Catch ex As Exception
'Error showing the taskbar, do what you want here..
End Try
End Sub
ウィンドウを一番上に設定する必要があります。
.NET 2.0で動作するかどうかはわかりませんが、.NET 4.5.2で動作しました。これがコードです:
using System;
using System.Drawing;
using System.Windows.Forms;
public partial class Your_Form_Name : Form
{
public Your_Form_Name()
{
InitializeComponent();
}
// CODE STARTS HERE
private System.Drawing.Size oldsize = new System.Drawing.Size(300, 300);
private System.Drawing.Point oldlocation = new System.Drawing.Point(0, 0);
private System.Windows.Forms.FormWindowState oldstate = System.Windows.Forms.FormWindowState.Normal;
private System.Windows.Forms.FormBorderStyle oldstyle = System.Windows.Forms.FormBorderStyle.Sizable;
private bool fullscreen = false;
/// <summary>
/// Goes to fullscreen or the old state.
/// </summary>
private void UpgradeFullscreen()
{
if (!fullscreen)
{
oldsize = this.Size;
oldstate = this.WindowState;
oldstyle = this.FormBorderStyle;
oldlocation = this.Location;
this.WindowState = System.Windows.Forms.FormWindowState.Normal;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Bounds = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
fullscreen = true;
}
else
{
this.Location = oldlocation;
this.WindowState = oldstate;
this.FormBorderStyle = oldstyle;
this.Size = oldsize;
fullscreen = false;
}
}
// CODE ENDS HERE
}
使用法:
UpgradeFullscreen(); // Goes to fullscreen
UpgradeFullscreen(); // Goes back to normal state
// You don't need arguments.
注意:フォームのクラス内に配置する必要があります(例:)。フォームに
partial class Form1 : Form { /* Code goes here */ }
配置しないとコードでthis
例外が発生するため、機能しません。
私はZingdのアイデアに取り組み、それを使いやすくしました。
また、標準のF11キーを追加して、フルスクリーンモードを切り替えました。
すべてがFullScreenクラスにあるため、フォームで一連の変数を宣言する必要はありません。フォームのコンストラクタでFullScreenオブジェクトをインスタンス化するだけです。
FullScreen fullScreen;
public Form1()
{
InitializeComponent();
fullScreen = new FullScreen(this);
}
これは、FullScreenオブジェクトを作成するときにフォームが最大化されていないことを前提としています。
クラスの関数の1つを使用して、全画面モードを切り替えます。
fullScreen.Toggle();
または明示的に処理する必要がある場合:
fullScreen.Enter();
fullScreen.Leave();
using System.Windows.Forms;
class FullScreen
{
Form TargetForm;
FormWindowState PreviousWindowState;
public FullScreen(Form targetForm)
{
TargetForm = targetForm;
TargetForm.KeyPreview = true;
TargetForm.KeyDown += TargetForm_KeyDown;
}
private void TargetForm_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.F11)
{
Toggle();
}
}
public void Toggle()
{
if (TargetForm.WindowState == FormWindowState.Maximized)
{
Leave();
}
else
{
Enter();
}
}
public void Enter()
{
if (TargetForm.WindowState != FormWindowState.Maximized)
{
PreviousWindowState = TargetForm.WindowState;
TargetForm.WindowState = FormWindowState.Normal;
TargetForm.FormBorderStyle = FormBorderStyle.None;
TargetForm.WindowState = FormWindowState.Maximized;
}
}
public void Leave()
{
TargetForm.FormBorderStyle = FormBorderStyle.Sizable;
TargetForm.WindowState = PreviousWindowState;
}
}