Frage

Nach der Feststellung dieser Frage und folgen sie den Anweisungen gibt, und nach vielen der Links, ich es geschafft, meine App zu bekommen als ein System Tray-icon angezeigt werden soll, und es verschwindet aus der Taskleiste, wenn ich es minimieren.

ABER - seltsames Verhalten! Wenn die Form offen ist, arbeitet das System Tray-Icon in Ordnung. Aber sobald ich es minimieren, der Tray-Icon nicht mehr auf jede Art von Mausklick reagiert.

Weitere Fakten, die ins Spiel kommen können: Die Form wird gestartet, indem ein roter Faden wird aus dem Hauptfaden ausgegliedert, und es ist mit .ShowDialog() geöffnet. Es gibt auch mehrere andere Threads im Hintergrund ausgeführt wird.

Alle Ideen, was falsch läuft?

War es hilfreich?

Lösung

Ersetzen f.ShowDialog(); mit Application.Run(f); wo f ist die Variable Ihre Form halten und es sollte funktionieren. Das Problem ist, dass ShowDialog gibt (und es die Nachricht von Schlaufenenden), wenn Sie das Formular auszublenden. Application.Run stellt eine ordnungsgemäße Nachrichtenschleife und das Fenster arbeitet, nachdem sie versteckt worden und kann zeigen, wieder auf das System-Tray-Symbol.

Andere Tipps

Nicht ganz sicher, was Ihr Code wie folgt aussieht, aber unten ist einige Code, den ich von einem unserer Apps gezogen. Seine in VB geschrieben, aber sollte nicht zu schwer für Sie zu konvertieren. Der Schlüssel ist eine Application Klasse zu erstellen, um Ihren Code zu hosten. Dieser Code hat keine Probleme eine Form zeigt, und schließen Sie es dann wiederholt oder mit minimiert oder maximiert wird.

Public Class NotifyApplicationContext
Inherits ApplicationContext

Private components As System.ComponentModel.IContainer
Private Notify As System.Windows.Forms.NotifyIcon
Private Menu As System.Windows.Forms.ContextMenu
Private mnuForm As System.Windows.Forms.MenuItem
Private F As Form

Public Sub New()
    InitializeContext()
End Sub

Private Sub InitializeContext()
    Me.components = New System.ComponentModel.Container
    Me.Notify = New System.Windows.Forms.NotifyIcon(Me.components)
    SetupContextMenu()
    Notify.ContextMenu = Me.Menu
    Notify.Icon = New Icon("YourApplicationIcon", 16, 16)
    Notify.Text = "Your Application Text"
    Notify.Visible = True
    F = New Form
    F.Show()
End Sub

Protected Overrides Sub Dispose(ByVal disposing As Boolean)
    MyBase.Dispose(disposing)
End Sub

Protected Overrides Sub ExitThreadCore()
    MyBase.ExitThreadCore()
End Sub

Private Sub SetupContextMenu()
    Me.Menu = New System.Windows.Forms.ContextMenu
    Me.mnuForm = New System.Windows.Forms.MenuItem
    Me.Menu.MenuItems.Add(mnuForm)
    mnuForm.Index = 7
    mnuForm.Text = "FormText"
    AddHandler mnuForm.Click, AddressOf Me.mnuTemp_Click
End Sub

Private Sub mnuForm_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    If F IsNot Nothing Then
        If F.Visible = True Then
            F.Close()
            F.Dispose()
            F = Nothing
        End If
    Else
        F = New Form
        F.Show()
    End If
    Notify.Text = "Change Application Text Here"
End Sub

End Class

Public Class Startup

<STAThread()> _
Public Shared Sub Main()
    Dim N As ApplicationContext = New NotifyApplicationContext
    Application.Run(N)
End Sub

End Class

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top