在我的应用程序中,我需要暂时使主窗体的最小化按钮变灰。任何想法如何实现这一目标?我不介意对Win32 dll进行p /调用。
编辑:灰显最小化按钮将是首选解决方案,但有没有其他方法可以防止表单最小化?
答案 0 :(得分:11)
我阅读了您对我的回复的评论,并为您提供了更完整的解决方案。我跑得很快,似乎有你想要的行为。不是从Form派生你的winforms,而是从这个类派生出来:
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;
}
}
}
如果你想在发送点击时决定是否允许最小化,你可以多做一点,例如:
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);
}
}
}
有关此窗口通知的详细信息,请参阅MSDN article about it。
答案 1 :(得分:10)
form.MinimizeBox = false;
或者如果在表单范围
MinimizeBox = false;
答案 2 :(得分:1)
只做MinimizeBox = false;在你的表格代码中。
答案 3 :(得分:1)
将此代码放入表单的Resize事件:
if (this.WindowState == FormWindowState.Minimized)
{
this.WindowState = FormWindowState.Normal;
}
这将使您的表单不可最小化(免责声明:我不主张以这种方式改变Windows的标准行为)。
答案 4 :(得分:0)
您还可以实现Minimize事件的句柄以取消命令
答案 5 :(得分:0)
别。别乱我的窗户。他们是我的,不是你的。这是我的电脑,如果我想最小化,我应该能够。我无法想到,也从未给出过这样做的充分理由。
答案 6 :(得分:0)
Coincoin的回答是正确的。 MinimizeBox也可作为设计器属性窗口中的属性使用。
@Kevin:虽然我很欣赏这种情绪,但这并不总是一个有效的答案。如果应用程序通过创建Form的新实例然后在其上调用.ShowDialog()来显示模式对话框,则您不希望用户最小化该Form,因为然后主UI线程上的所有输入都将被阻止,直到Form的模态状态是满足的。用户可能会点击主表单,只是从Windows获得“ding ding ding”无响应的声音而不知道该怎么做。答案 7 :(得分:0)
只需将表单的MinimizeBox属性设置为false即可。 这将禁用最小化按钮,但其他按钮将保持正常运行。