【问题标题】:Cancel A WinForm Minimize?取消 WinForm 最小化?
【发布时间】:2010-09-17 16:13:31
【问题描述】:

我有一个禁用了 minimizeMaximizeClose 按钮​​的 winform,但如果有人在任务栏中按下它,它仍然会最小化。我想防止这种情况发生。

我怎样才能做到这一点?

【问题讨论】:

    标签: c# winforms minimize


    【解决方案1】:

    覆盖表单上的 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线程中找到的代码:
    How to disable the minimize button in C#?

    效果很好:没有闪烁,当用户尝试最小化时什么也没有。

    【讨论】:

    • 应该是答案。
    【解决方案2】:

    您可能会发现他们在 SizeChanged 事件中更改它并检查 WindowState,如果它已设置为 Minimized,则将其设置回 Normal。不是最优雅的解决方案,但应该可以。

    例如。

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

    【讨论】:

    • 这应该也可以,但是由于事件是在窗口最小化之后触发的,所以可能会出现闪烁效果。
    • @Adrian:是的,我只是在想,这取决于表单上的内容以及需要进行多少重绘。
    • 如果窗口最大化怎么办?您需要在事件触发之前知道窗口状态。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      将以下代码添加到 Form 类的私有 void InitializeComponent() 方法中:

                  this.MinimizeBox = false;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-02
        • 2014-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-07
        相关资源
        最近更新 更多