在找到这个问题并按照那里的说明进行操作后,加上许多链接,我设法让我的应用程序显示为系统托盘图标,当我最小化它时它从任务栏中消失。
但是 - 奇怪的行为!当表单打开时,系统托盘图标工作正常。但是,一旦我将其最小化,托盘图标就会停止响应任何类型的鼠标点击。
其他可能起作用的事实:表单是由一个从主线程中分离出来的线程启动的,它是用.ShowDialog()
. 还有几个其他线程在后台运行。
任何想法出了什么问题?
在找到这个问题并按照那里的说明进行操作后,加上许多链接,我设法让我的应用程序显示为系统托盘图标,当我最小化它时它从任务栏中消失。
但是 - 奇怪的行为!当表单打开时,系统托盘图标工作正常。但是,一旦我将其最小化,托盘图标就会停止响应任何类型的鼠标点击。
其他可能起作用的事实:表单是由一个从主线程中分离出来的线程启动的,它是用.ShowDialog()
. 还有几个其他线程在后台运行。
任何想法出了什么问题?
替换f.ShowDialog();
为持有你的变量的Application.Run(f);
位置,它应该可以正常工作。问题是当您隐藏表单时返回(并且它的消息循环结束)。提供适当的消息循环,您的窗口在隐藏后可以工作,并且可以使用系统托盘图标再次显示。f
Form
ShowDialog
Application.Run
不太确定您的代码是什么样的,但下面是我从我们的一个应用程序中提取的一些代码。它是用 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
结束类