如何禁用 C# 中的最小化按钮?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/319124/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to disable the minimize button in C#?
提问by Filip Fr?cz
In my application I need to temporarily gray out the minimize button of the main form. Any ideas how this can be achieved? I don't mind doing p/invokes to Win32 dlls.
在我的应用程序中,我需要暂时将主窗体的最小化按钮灰显。任何想法如何实现?我不介意对 Win32 dll 执行 p/invokes。
Edit: Graying out the minimize button would be the preferred solution, but is there any other way of preventing the form from becoming minimized?
编辑:将最小化按钮变灰是首选的解决方案,但有没有其他方法可以防止表单被最小化?
采纳答案by Rob
I read your comment in regards to my response and was able to drum up a more complete solution for you. I ran this quickly and it seemed to have the behavior that you wanted. Instead of deriving your winforms from Form, derive from this class:
我阅读了您对我的回复的评论,并能够为您制定更完整的解决方案。我跑得很快,它似乎有你想要的行为。不是从 Form 派生你的 winform,而是从这个类派生:
using System;
using System.Windows.Forms;
using System.ComponentModel;
namespace NoMinimizeTest
{
public class MinimizeControlForm : Form
{
private const int WM_SYSCOMMAND = 0x0112;
private const int SC_MINIMIZE = 0xf020;
protected MinimizeControlForm()
{
AllowMinimize = true;
}
protected override void WndProc(ref Message m)
{
if (!AllowMinimize)
{
if (m.Msg == WM_SYSCOMMAND)
{
if (m.WParam.ToInt32() == SC_MINIMIZE)
{
m.Result = IntPtr.Zero;
return;
}
}
}
base.WndProc(ref m);
}
[Browsable(true)]
[Category("Behavior")]
[Description("Specifies whether to allow the window to minimize when the minimize button and command are enabled.")]
[DefaultValue(true)]
public bool AllowMinimize
{
get;
set;
}
}
}
You could do a bit more if you wanted to be able to decide whether to allow minimizing at the time the click is sent, for instance:
如果您希望能够在发送点击时决定是否允许最小化,您可以做更多的事情,例如:
using System;
using System.Windows.Forms;
using System.ComponentModel;
namespace NoMinimizeTest
{
public class MinimizeControlForm : Form
{
private const int WM_SYSCOMMAND = 0x0112;
private const int SC_MINIMIZE = 0xf020;
protected MinimizeControlForm()
{
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SYSCOMMAND)
{
if (m.WParam.ToInt32() == SC_MINIMIZE && !CheckMinimizingAllowed())
{
m.Result = IntPtr.Zero;
return;
}
}
base.WndProc(ref m);
}
private bool CheckMinimizingAllowed()
{
CancelEventArgs args = new CancelEventArgs(false);
OnMinimizing(args);
return !args.Cancel;
}
[Browsable(true)]
[Category("Behavior")]
[Description("Allows a listener to prevent a window from being minimized.")]
public event CancelEventHandler Minimizing;
protected virtual void OnMinimizing(CancelEventArgs e)
{
if (Minimizing != null)
Minimizing(this, e);
}
}
}
For more information about this window notification, see the MSDN article about it.
回答by Coincoin
form.MinimizeBox = false;
or if in the form scope
或者如果在表单范围内
MinimizeBox = false;
回答by Will Dean
Just do MinimizeBox = false; in your form's code.
只需执行 MinimizeBox = false; 在您的表单代码中。
回答by sebagomez
You can also implement handle to the Minimize event to cancel the command
您还可以实现 Minimize 事件的句柄以取消命令
回答by MusiGenesis
Put this code in your form's Resize event:
将此代码放在表单的 Resize 事件中:
if (this.WindowState == FormWindowState.Minimized)
{
this.WindowState = FormWindowState.Normal;
}
This will make your form un-minimizable (DISCLAIMER: I do not advocate altering the standard behavior of windows in this way).
这将使您的表单无法最小化(免责声明:我不主张以这种方式改变窗口的标准行为)。
回答by Kevin
Don't. Don't mess with my windows. They are mine, not yours. It is my computer and if I want to minimize, I should be able to. I can't think of, and have never been given, a good reason for doing this.
别。不要乱动我的窗户。他们是我的,不是你的。这是我的电脑,如果我想最小化,我应该可以。我想不出,也从未得到过这样做的充分理由。
回答by Rob
Coincoin's answer is correct. MinimizeBox is also available as a property in the designer properties window.
Coincoin 的答案是正确的。MinimizeBox 也可用作设计器属性窗口中的属性。
@Kevin: While I appreciate the sentiment, that's not always a valid answer. If the application displays a modal dialog box by creating a new instance of a Form and then calling .ShowDialog() on it, you don't want the user to minimize that Form, because then all input on the main UI thread is blocked until that Form's modal status is satisfied. The user could potentially click on the main form and just get the "ding ding ding" unresponsive sound from Windows and not know what to do.
@Kevin:虽然我很欣赏这种情绪,但这并不总是一个有效的答案。如果应用程序通过创建 Form 的新实例然后在其上调用 .ShowDialog() 来显示模式对话框,您不希望用户最小化该 Form,因为这样主 UI 线程上的所有输入都会被阻塞,直到满足 Form 的模态状态。用户可能会点击主窗体,然后从 Windows 中得到“叮叮叮”的无响应声音而不知道该怎么做。
回答by Apurva Shrestha
just set the MinimizeBox property of your form to false. this will disable the minimize button but other buttons will remain functional.
只需将表单的 MinimizeBox 属性设置为 false。这将禁用最小化按钮,但其他按钮将保持功能。