Как отключить кнопку свертывания в C #? - PullRequest
6 голосов
/ 26 ноября 2008

В моем приложении мне нужно временно отключить кнопку минимизации основной формы. Есть идеи, как этого достичь? Я не против сделать p / вызывает Win32 DLL.

Редактировать: Выделение кнопки минимизации было бы предпочтительным решением, но есть ли другой способ предотвратить сворачивание формы?

Ответы [ 8 ]

11 голосов
/ 26 ноября 2008

Я прочитал ваш комментарий относительно моего ответа и смог найти более полное решение для вас. Я запустил это быстро, и, похоже, у вас было то поведение, которое вы хотели. Вместо того, чтобы выводить ваши 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 об этом .

.
10 голосов
/ 26 ноября 2008
form.MinimizeBox = false;

или если в форме формы

MinimizeBox = false;
1 голос
/ 26 ноября 2008

Добавьте этот код в событие изменения размера вашей формы:

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

Это сделает вашу форму не минимизируемой (ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я не рекомендую изменять стандартное поведение окон таким образом).

1 голос
/ 26 ноября 2008

Просто сделайте MinimizeBox = false; в коде вашей формы.

0 голосов
/ 28 мая 2015

просто установите для свойства MinimizeBox вашей формы значение false. это отключит кнопку свертывания, но другие кнопки останутся работоспособными.

0 голосов
/ 26 ноября 2008

Ответ Coincoin правильный. MinimizeBox также доступен как свойство в окне свойств дизайнера.

@ Кевин: Хотя я ценю чувства, это не всегда правильный ответ. Если приложение отображает модальное диалоговое окно, создавая новый экземпляр формы и затем вызывая .ShowDialog (), вы не хотите, чтобы пользователь свернул эту форму, потому что тогда весь ввод в основном потоке пользовательского интерфейса блокируется модальный статус этой формы удовлетворен. Пользователь может потенциально нажать на основную форму и просто получить не отвечающий звук «динь-динь-динь» из Windows и не знать, что делать.

0 голосов
/ 26 ноября 2008

Не. Не связывайтесь с моими окнами. Они мои, а не ваши. Это мой компьютер, и если я хочу минимизировать, я должен быть в состоянии. Я не могу придумать и никогда не получал веских причин для этого.

0 голосов
/ 26 ноября 2008

Вы также можете реализовать дескриптор события Minimize для отмены команды

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...