Как отключить кнопку сворачивания в C #?
Вопрос
В моем приложении мне нужно временно выделить серым цветом кнопку сворачивания основной формы.Есть какие-нибудь идеи, как этого можно достичь?Я не возражаю делать p / invokes для DLL-файлов Win32.
Редактировать:Выделение кнопки сворачивания серым цветом было бы предпочтительным решением, но есть ли какой-либо другой способ предотвратить сворачивание формы?
Решение
Я прочитал ваш комментарий относительно моего ответа и смог найти более полное решение для вас. Я запустил это быстро, и, похоже, у вас было то поведение, которое вы хотели Вместо того, чтобы выводить ваши winforms из Form, производные от этого класса:
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; в коде вашей формы.
Вставьте этот код в событие изменения размера вашей формы:
if (this.WindowState == FormWindowState.Minimized)
{
this.WindowState = FormWindowState.Normal;
}
Это сделает вашу форму не минимизируемой (ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я не рекомендую таким образом изменять стандартное поведение окон).
Вы также можете реализовать дескриптор события Minimize для отмены команды
Не надо.Не трогай мои окна.Они мои, а не твои.Это мой компьютер, и если я хочу свести его к минимуму, я должен быть в состоянии это сделать.Я не могу придумать, и мне никогда не давали веской причины для этого.
Ответ Coincoin правильный. MinimizeBox также доступен как свойство в окне свойств дизайнера.
@ Кевин: Хотя я ценю настроение, это не всегда правильный ответ. Если приложение отображает модальное диалоговое окно, создавая новый экземпляр формы и затем вызывая .ShowDialog (), вы не хотите, чтобы пользователь свернул эту форму, потому что тогда весь ввод в основном потоке пользовательского интерфейса блокируется до модальный статус этой формы удовлетворен. Пользователь может потенциально щелкнуть на главной форме и просто получить «ding ding ding» не отвечает на звук из Windows и не знает, что делать.
просто установите для свойства MinimizeBox вашей формы значение false. это отключит кнопку свертывания, но другие кнопки останутся работоспособными.