在我的应用程序,我需要暂时的灰色了尽量减少按钮的主要形式。任何想法如何能够实现?我不介意这样做,p/调用的Win32dll。

编辑:老龄化出尽量减少按钮将是首选解决方案,但是没有任何其他方式的防止形成最小?

有帮助吗?

解决方案

我读了你的评论关于我的反应,并能够鼓立一个更完整的解决方案。我跑这么快和这似乎有行为是你想要的。而不是导出你的它从形式,来自这类:


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关于它的文章.

其他提示

form.MinimizeBox = false;

,或者如果在形式范围

MinimizeBox = false;

只要做MinimizeBox = FALSE;在窗体的代码。

将这个代码在窗体的Resize事件:

if (this.WindowState == FormWindowState.Minimized)
{
    this.WindowState = FormWindowState.Normal;
}

这会使你的形式取消可最小化(免责声明:我不主张改变这样的窗户的标准行为)

您还可以实现手柄将最小化事件取消命令

别。不要惹我的窗户。他们是我的,不是你们的。这是我的电脑,如果我希望尽量减少,我应该可以。我无法想象的,而从来没有被赋予,一个很好的理由这样做。

Coincoin的答案是正确的。 MinimizeBox也可作为在设计属性窗的性质。

@Kevin:虽然我欣赏的情绪,这并不总是有效的答案。如果应用程序通过创建窗体的新实例,然后调用.ShowDialog()就可以显示一个模式对话框,你不希望用户尽量减少表格,因为那时在主UI线程上的所有输入被阻塞,直到该窗体的模态状态满意。用户可能会点击主窗体上和从Windows刚刚得到的“叮叮叮叮”的声音反应迟钝,不知道该怎么办。

只是你的形式的MinimizeBox属性设置为false。 这将禁用的最小化按钮,但其他的按钮将保持功能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top