0

この質問を見つけてそこの指示に従い、さらに多くのリンクをたどった後、アプリをシステムトレイアイコンとして表示することができ、最小化するとタスクバーから消えました.

しかし - 奇妙な振る舞い!フォームが開いている場合、システム トレイ アイコンは正常に機能します。しかし、最小化するとすぐに、トレイ アイコンがマウス クリックに反応しなくなります。

関係する可能性のあるその他の事実: フォームは、メイン スレッドからスピンオフされたスレッドによって起動され、 で開かれ.ShowDialog()ます。バックグラウンドで実行されている他のスレッドもいくつかあります。

何がうまくいかないのですか?

4

2 に答える 2

1

を保持している変数f.ShowDialog();Application.Run(f);どこにあるかを置き換えれば、正常に機能するはずです。問題は、フォームを非表示にすると戻る(そしてメッセージループが終了する)ことです。適切なメッセージループを提供し、ウィンドウは非表示にされた後に機能し、システムトレイアイコンを使用して再度表示できます。fFormShowDialogApplication.Run

于 2010-01-26T19:46:11.317 に答える
0

あなたのコードがどのように見えるかはよくわかりませんが、以下は私が私たちのアプリの 1 つから取り出したコードです。VB で書かれていますが、変換するのは難しくありません。重要なのは、コードをホストする ApplicationContext クラスを作成することです。このコードでは、フォームを表示してから閉じたり、最小化または最大化を繰り返しても問題はありません。

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

クラス終了

パブリッククラスのスタートアップ

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

クラス終了

于 2010-01-26T17:22:47.440 に答える