Möglichkeit der Implementierung von Minimize-to-Tray in C # in einem Attribute
-
19-09-2019 - |
Frage
sind Attribute genial. Aber ist es möglich, eine C # Attributklasse zu erstellen, dass, wenn markiert, macht Ihre Anwendung in die Taskleiste minimieren?
Technisch wäre das Attribut müssen sich auf die Klasse der Hauptform platziert werden. Sobald der Benutzer auf der X-Schaltfläche klickt, sollte diese Form nicht beenden, sollte aber in die Taskleiste minimiert. Das Symbol für die Minimierung sollte auch im Attribute angegeben werden.
Ist dies technisch machbar? Ich kann keine Informationen zum Überschreiben Klassencode von einem auf dieser Klasse platziert Attribute finden. (Sie müssen mindestens überschreiben eine Methode, um es in dem Tray zu machen zu minimieren.)
Lösung
Warum dies nicht nur tun:
class TrayForm : Form
{
NotifyIcon notifyIcon = new NotifyIcon();
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (e.CloseReason != CloseReason.WindowsShutDown && e.CloseReason != CloseReason.ApplicationExitCall)
{
e.Cancel = true;
this.Hide();
this.notifyIcon.Visible = true;
}
base.OnFormClosing(e);
}
protected override void OnSizeChanged(EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
this.Hide();
this.notifyIcon.Visible = true;
}
base.OnSizeChanged(e);
}
}
Andere Tipps
Das mit Form Vererbung erreicht leichter werden könnte eher als Attribute, etwas ist immer noch die Attribute zur Laufzeit haben, zu interpretieren, um die gewünschte Wirkung zu erzielen.
Mit Vererbung können Sie einfach Setup die Klasse, wie Sie möchten und haben im Wesentlichen ein Opt-in oder Opt-out-Fähigkeit (auch mit einem Attribut, dies zu tun) verhalten soll.
Es ist sicherlich möglich, aber ich würde vorschlagen, dass die Form close () Methode überschrieben und einfach etwas Minimierungs Code in dort setzen. Es ist einfach, logisch und einfach für die Zukunft Entwickler zu folgen.
Einige Beispielcode, wie dies zu erreichen ist:
http://www.dreamincode.net/code/snippet2660.htm
und
Es ist nicht möglich, mit der üblichen Form
Klasse. Aber es ist möglich, eine eigene Klasse zu erstellen, die erbt von Form
und auch ein solches Attribut unterstützt. Aber das würde nur die Dinge unnötig kompliziert machen, wäre es wahrscheinlich besser, eine MinimizeToTray
Eigenschaft dieser Klasse hinzuzufügen.
(wie das Beispiel PhilipW vorgesehen, aber mit einer Eigenschaft hinzugefügt, um das Verhalten zu steuern)