Как отключить кнопку Свернуть в C#?
в моем приложении мне нужно временно отключить кнопку минимизации основной формы. Есть идеи, как этого достичь? Я не против делать P / вызывает DLL Win32.
Edit: серый цвет кнопки минимизации будет предпочтительным решением, но есть ли другой способ предотвратить минимизацию формы?
8 ответов
Я прочитал ваш комментарий в отношении моего ответа и смог найти для вас более полное решение. Я пробежал это быстро, и, казалось, у него было поведение, которое вы хотели. Вместо получения 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);
}
}
}
дополнительные сведения об этом уведомлении см. В разделе the MSDN статья об этом.
поместите этот код в событие изменения размера формы:
if (this.WindowState == FormWindowState.Minimized)
{
this.WindowState = FormWindowState.Normal;
}
это сделает вашу форму не минимизируемой (отказ от ответственности: я не выступаю за изменение стандартного поведения windows таким образом).
Не надо. Не трогай мои окна. Они мои, не твои. Это мой компьютер, и если я хочу свести к минимуму, я должен быть в состоянии. Я не могу придумать и никогда не получал хорошей причины для этого.
ответ Coincoin правильный. MinimizeBox также доступен в качестве свойства в окне свойств конструктора.
@Kevin: хотя я ценю настроение, это не всегда правильный ответ. Если приложение отображает модальное диалоговое окно, создавая новый экземпляр формы и вызывая его.ShowDialog () на нем вы не хотите, чтобы пользователь минимизировал эту форму, потому что тогда все входные данные в основном потоке пользовательского интерфейса блокируются до тех пор, пока модальный статус этой формы не будет удовлетворен. Пользователь потенциально можно нажать на основную форму и просто получить "динь-динь-динь" невосприимчивый звук из окон и не знать, что делать.
просто установите свойство MinimizeBox вашей формы в false. это отключит кнопку Свернуть, но другие кнопки останутся функциональными.