Ich habe Ihren Kommentar in Bezug auf meine Antwort gelesen und konnte eine umfassendere Lösung für Sie erstellen. Ich lief das schnell und es schien das Verhalten zu haben, das du wolltest. Statt Ihre WinForms von Form ableiten, ergeben sich aus dieser Klasse:
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;
}
}
}
Sie könnten ein bisschen mehr tun, wenn Sie in der Lage sein wollte, zu entscheiden, ob zu der Zeit zu minimieren, damit der Klick gesendet wird, zum Beispiel:
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);
}
}
}
Weitere Informationen zu dieser Fensterbenachrichtigung finden Sie unter MSDN article about it.
Damit wird die Minimierungsbox ausgeblendet, aber nicht ausgegraut. –
Hmmm, komisch. Ich habe es getestet und es macht es grau. Es ist immer noch da, halbtransparent und du kannst es nicht anklicken. – Coincoin
Hängt von Ihrem Windows-Thema ab. Wenn die Minimieren-Schaltfläche aktiviert ist, erhalten Sie ein Bild. Wenn deaktiviert, erhalten Sie ein anderes Bild. Dieses Bild könnte nichts sein, also siehst du nicht einmal einen ausgegrauten Knopf. – Eyal