取消WinForm窗体最小化?

5

我有一个winform,最小化、最大化和关闭按钮都被禁用了,但是如果有人在任务栏中按下它,它仍然会最小化。我想防止这种情况发生。

我该怎么做呢?

4个回答

19

在你的表单上覆盖 WndProc,监听最小化消息并取消它。

将以下代码添加到您的表单中:

private const int WM_SYSCOMMAND = 0x0112; 
private const int SC_MINIMIZE = 0xf020; 

 protected override void WndProc(ref Message m) 
{ 
    if (m.Msg == WM_SYSCOMMAND) 
    { 
        if (m.WParam.ToInt32() == SC_MINIMIZE) 
        { 
            m.Result = IntPtr.Zero; 
            return; 
        } 
    } 
    base.WndProc(ref m); 
} 

我修改了Rob在这篇SO帖子中的代码:
如何在C#中禁用最小化按钮?

效果很好:当用户尝试最小化时,没有闪烁或其他问题。


这应该是答案。 - Vinicius Gonçalves

4
您可以在 SizeChanged 事件中捕获它们变化,并检查 WindowState,如果已设置为 Minimized,则将其设置回 Normal。这不是最优雅的解决方案,但应该可以解决问题。

例如:

private void myForm_SizeChanged(object sender, System.EventArgs e)
{
   if (myForm.WindowState == FormWindowState.Minimized)
   {
       myForm.WindowState = FormWindowState.Normal;
   }
}

这个也应该可以工作,但由于事件在窗口最小化后触发,所以有可能会出现闪烁效果。 - Adrian Fâciu
@Adrian:是的,我也在想,这取决于表格上有什么内容以及需要重新绘制多少。 - Iain Ward
如果窗口已被最大化,那该怎么办?在事件触发之前,您需要知道窗口的状态。 - dynamichael

1

你可以从窗口中简单地删除最小化按钮:

将下面的代码添加到Form类的private void InitializeComponent()方法中:

            this.MinimizeBox = false;

1
如果适合您,只需将其从任务栏隐藏:ShowInTaskbar=false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接