Announcement

Collapse
No announcement yet.

Programm lässt sich nicht in den SystemTray minimieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Programm lässt sich nicht in den SystemTray minimieren

    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:

    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);
    }
    Nun erweitere ich das Systemmenü:

    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");
    }
    Bei einem Klick auf diesen Menüeintrag soll das Programmfenster ausgeblendet werden:

    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;
        }
      }
    }
    Bei einem Klick im Kontextmenü soll entweder das Programmfenster wieder angezeigt oder das gesamte Programm beendet werden:

    Code:
    private void contextMenuItem1_Click(object sender, EventArgs e)
    {
      notifyIcon.Visible = false;
      Show();
      Visible = true;
    }
    
    private void contextMenuItem2_Click(object sender, EventArgs e)
    {
      Close();
    }
    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

  • #2
    Die beschriftung "Test" kommt wenn du mit der Maus eine Sekunde über dem TrayIcon bleibts.

    Die Einbindung des Kontextmenus klappt super und das Anzeigen und Beenden der App funktioniert auch.
    Hier ein Tipp: schreibe dir eine funktion zum schließen deiner App die du mit jedem deiner möglichen Applikation-Schließen-Knöpfe ausführst.

    Was für ein Fenster bei dir noch auf sein soll kann ich hier allerdings gerade nicht sehen...
    Kann es sein, dass du iwo in deinem Code eine Form öffnest mit dem "Show" befehl?
    Diese musst du natürlich auch minimieren bzw. schließen, da dein visible = false nur auf das ausführende Fenster geht.

    Comment


    • #3
      Respekt für die Erstellung eines solchen Kontextmenüs. Das ist mir tatsächlich noch zu hoch, ich fange gerade erst an mich in die Materie einzuarbeiten. Momentan bin ich noch glücklich mit Domain Erstellung und Hosting bei meinem Provider, da der Homepage Baukasten eine Menge Möglichkeiten bietet. Aber ich will künftig auch meine eigenen Programme schreiben können, nur ist es bis dahin noch ein relativ weiter Weg...

      Es hilft aber tatsächlich immer, Codes wie die oben geposteten anzuschauen und sich damit zu beschäftigen, um seinen Horizont zu erweitern.
      Zuletzt editiert von Blanka; 26.11.2013, 12:16.
      Let it rain - as long as it happens outside

      Comment

      Working...
      X