我正在使用C#使用无边框形式和最大化方法为应用程序提供“全屏模式”。 当我使表格无边框而没有最大化时,这非常有效 - 你可以在屏幕上看到的只是表格,任务栏被覆盖..但是,如果我手动最大化表单(用户交互),然后尝试制作它没有边界&最大化,任务栏被绘制在表单上(因为我没有使用WorkingArea,表单上的部分控件被隐藏。这是不显示任务栏的预期行为)。 我尝试将表单的属性TopMost设置为true,但这似乎没有任何效果。
有没有办法重做这个以便始终覆盖任务栏?
if (this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.None)
{
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
}
else
{
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
}
if (this.WindowState != FormWindowState.Maximized)
{
this.WindowState = FormWindowState.Maximized;
}
else
{
if (this.FormBorderStyle == System.Windows.Forms.FormBorderStyle.Sizable) this.WindowState=FormWindowState.Normal;
}
答案 0 :(得分:1)
但是,如果我手动最大化表单(用户交互)......
问题是您的窗口已经在内部标记为处于最大化状态。因此,最大化它再次将不会改变表单的当前大小。这将使任务栏暴露出来。您需要先将其恢复为Normal,然后再恢复为Maximized。是的,这有点闪烁。
private void ToggleStateButton_Click(object sender, EventArgs e) {
if (this.FormBorderStyle == FormBorderStyle.None) {
this.FormBorderStyle = FormBorderStyle.Sizable;
this.WindowState = FormWindowState.Normal;
}
else {
this.FormBorderStyle = FormBorderStyle.None;
if (this.WindowState == FormWindowState.Maximized) this.WindowState = FormWindowState.Normal;
this.WindowState = FormWindowState.Maximized;
}
}
答案 1 :(得分:0)
不确定为什么会发生这种情况,并且我讨厌应用程序,假设他们可以占用我的所有屏幕。虽然这对于1024x768显示器来说可能是可以接受的,但当该死的东西决定它拥有我的屏幕时,我的30英寸显示器就被浪费了。
所以我的信息是,可能专注于确保所有控件都可见,而不是专注于最大化窗口。
您始终可以检测窗口大小更改,然后覆盖默认行为,处理您遇到的意外问题。但不是最大化并采用所有30“显示器,而是计算窗口需要的大小并相应地设置大小。
我的2美分,这正是我的想法值得的;)
答案 2 :(得分:0)
您可以尝试使用WinApi SetWindowPos方法,如下所示:
public static class WinApi
{
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter,
int x, int y, int width, int height,
uint flags);
static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
const uint SWP_NOSIZE = 0x0001;
const uint SWP_NOMOVE = 0x0002;
const uint SWP_SHOWWINDOW = 0x0040;
public static void SetFormTopMost(Form form)
{
SetWindowPos(form.Handle, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
}
}
在你的表单中称之为:
WinApi.SetFormTopMost(this);