Mon icône cesse de répondre lorsque mon application est réduite au minimum!

StackOverflow https://stackoverflow.com/questions/2055702

  •  20-09-2019
  •  | 
  •  

Question

Après avoir trouvé cette question et en suivant les instructions qui y sont, plus suivant la plupart des liens, j'ai réussi à obtenir mon application à apparaître comme une icône de la barre système, et il disparaît de la barre des tâches lorsque je le réduire.

- comportement bizarre! Lorsque le formulaire est ouvert, l'icône de la barre système fonctionne très bien. Mais dès que je minimisez, l'icône de la barre cesse de répondre à tout type de clic de souris.

D'autres faits qui peuvent entrer en jeu: la forme est mise en route par un fil filé hors du fil conducteur, et il est ouvert avec .ShowDialog(). Il y a aussi plusieurs autres threads en cours d'exécution en arrière-plan.

Toutes les idées ce qui ne va pas?

Était-ce utile?

La solution

Remplacer f.ShowDialog(); avec Application.Run(f);f est la variable qui contient votre Form et il devrait fonctionner correctement. Le problème est que revient ShowDialog (et il est termine boucle de message) lorsque vous masquez la forme. Application.Run fournit une boucle de message approprié et la fenêtre fonctionne après qu'il a été caché et peut être montrer à nouveau en utilisant l'icône de la barre système.

Autres conseils

Pas trop sûr de ce que votre code ressemble, mais au-dessous est un code que je tiré d'une de nos applications. Il est écrit en VB, mais ne devrait pas être trop difficile pour vous de convertir. La clé est de créer une classe ApplicationContext pour héberger votre code. Ce code n'a pas de problèmes montrant une forme, puis le fermer de façon répétée ou avec minimiser ou maximiser.

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

Classe publique de démarrage

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

End Class

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top