我有一个禁用了 minimizeMaximizeClose 按钮的 winform,但如果有人在任务栏中按下它,它仍然会最小化。我想防止这种情况发生。
我怎样才能做到这一点?
在您的表单上覆盖 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的代码:
如何在 C# 中禁用最小化按钮?
效果很好:没有闪烁,当用户尝试最小化时什么也没有。
您可能会发现他们在SizeChanged事件中对其进行了更改并检查WindowState,如果将其设置为Minimized则将其设置回Normal。不是最优雅的解决方案,但应该可以。
例如。
private void myForm_SizeChanged(object sender, System.EventArgs e)
{
if (myForm.WindowState == FormWindowState.Minimized)
{
myForm.WindowState = FormWindowState.Normal;
}
}
如果它适合您,只需将其从任务栏中隐藏:ShowInTaskbar=false
您可以简单地从窗口中删除最小化按钮:
将以下代码添加到 Form 类的私有 void InitializeComponent() 方法中:
this.MinimizeBox = false;