Hallo,
ich möchte mein Programm über einen Eintrag im Systemmenü des Formulars minimieren lassen.
Dazu habe ich zunächst ein NotifyIcon und ein Kontextmenü erstellt:
Nun erweitere ich das Systemmenü:
Bei einem Klick auf diesen Menüeintrag soll das Programmfenster ausgeblendet werden:
Bei einem Klick im Kontextmenü soll entweder das Programmfenster wieder angezeigt oder das gesamte Programm beendet werden:
Mein Problem ist jetzt Folgendes:
Wenn ich den neuen Eintrag zum Minimieren klicke, wird zwar die WndProc-Methode korrekt ausgeführt und das Formular ausgeblendet, allerdings erscheint kein Punkt mit der Beschriftung "Test" im Tray.
Außerdem bleibt noch irgendein anderes Fenster sichtbar. Ich vermute mal, dass das was mit .NET zu tun hat, es ist allerdings komplett leer. Theoretisch müsste ich doch eigentlich wieder im Arbeitsplatz bzw. Windows-Explorer auf der gestarteten EXE-Datei landen oder?
Vielen Dank schonmal und viele Grüße
ich möchte mein Programm über einen Eintrag im Systemmenü des Formulars minimieren lassen.
Dazu habe ich zunächst ein NotifyIcon und ein Kontextmenü erstellt:
Code:
private void InitializeComponent() { this.components = new Container(); ... this.notifyIcon = new NotifyIcon(); this.contextMenu = new ContextMenu(); this.contextMenuItem1 = new MenuItem(); this.contextMenuItem2 = new MenuItem(); this.SuspendLayout(); this.notifyIcon.ContextMenu = this.contextMenu; this.notifyIcon.Text = "Test"; this.contextMenu.Name = "contextMenu"; this.contextMenu.MenuItems.AddRange(new MenuItem[] { this.contextMenuItem1, this.contextMenuItem2 }); this.contextMenuItem1.Name = "contextMenuItem1"; this.contextMenuItem1.Text = "&Anzeigen"; this.contextMenuItem1.Click += new EventHandler(this.contextMenuItem1_Click); this.contextMenuItem2.Name = "contextMenuItem2"; this.contextMenuItem2.Text = "&Beenden"; this.contextMenuItem2.Click += new EventHandler(this.contextMenuItem2_Click); }
Code:
private void Form_Load(object sender, EventArgs e) { int hmenu = GetSystemMenu(Handle, 0); AppendMenu(hmenu, 0xA00, 0, null); AppendMenu(hmenu, 0, 111, "Zum System&icon minimieren"); }
Code:
protected override void WndProc(ref Message m) { base.WndProc(ref m); if (m.Msg == 0x112) { if (m.WParam.ToInt32() == 111) { Visible = false; Hide(); notifyIcon.Visible = true; } } }
Code:
private void contextMenuItem1_Click(object sender, EventArgs e) { notifyIcon.Visible = false; Show(); Visible = true; } private void contextMenuItem2_Click(object sender, EventArgs e) { Close(); }
Wenn ich den neuen Eintrag zum Minimieren klicke, wird zwar die WndProc-Methode korrekt ausgeführt und das Formular ausgeblendet, allerdings erscheint kein Punkt mit der Beschriftung "Test" im Tray.
Außerdem bleibt noch irgendein anderes Fenster sichtbar. Ich vermute mal, dass das was mit .NET zu tun hat, es ist allerdings komplett leer. Theoretisch müsste ich doch eigentlich wieder im Arbeitsplatz bzw. Windows-Explorer auf der gestarteten EXE-Datei landen oder?
Vielen Dank schonmal und viele Grüße
Comment