2010-09-17 67 views
4

我有一个winMaximizeClose按钮被禁用,但如果有人在任务栏中按下它,它会最小化。我想防止这种情况发生。取消WinForm最小化?

我该如何做到这一点?

回答

3

你也许可以赶上他们在SizeChanged事件改变并检查WindowState,如果它被设置为Minimized然后将其设置回Normal。不是最优雅的解决方案,但应该工作。

例如。

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

这也应该工作,但是由于窗口最小化后触发事件,可能会出现闪烁效果。 – 2010-09-17 16:23:01

+0

@Adrian:是的,我只是在想,这取决于表单上的内容以及需要进行多少次重绘。 – w69rdy 2010-09-17 16:24:47

0

如果它是适合你的,只是从任务栏隐藏:ShowInTaskbar=false

15

覆盖的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); 
} 

我修改这个SO线程发现Rob的代码:
How to disable the minimize button in C#?

伟大工程:无闪烁,什么都没有,当用户试图最小化。

+0

+1,这是正确的做法 – 2010-09-17 21:00:07

+0

它应该是答案。 – 2017-01-14 10:58:29

0

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

添加以下代码到私人无效的InitializeComponent()Form类的方法:

  this.MinimizeBox = false;