我正在vb.net中编写一个使用系统托盘的程序,我想要实现的是以下内容。
如果单击系统托盘图标,则应最小化/恢复表单。 (我可以这样做) 我坚持的一点是,如果表格是'开放'而没有聚焦,我希望它得到关注而不是最小化。
如果表单没有处于最小化状态且没有焦点,我似乎无法找到任何可以进行测试的内容。
欢迎任何建议。
由于
答案 0 :(得分:0)
通过收听激活和取消激活事件来跟踪表单激活状态。一个复杂因素是单击图标时将停用表单。通过记录它发生的时间来解决这个问题。像这样:
Public Class Form1
Private IsActivated As Boolean
Private DeActivation As DateTime
Protected Overrides Sub OnActivated(e As System.EventArgs)
IsActivated = True
MyBase.OnActivated(e)
End Sub
Protected Overrides Sub OnDeactivate(e As System.EventArgs)
IsActivated = False
DeActivation = DateTime.Now
MyBase.OnDeactivate(e)
End Sub
Private Sub NotifyIcon1_MouseClick(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseClick
If Me.WindowState = FormWindowState.Minimized Then
Me.WindowState = FormWindowState.Normal
Else
If IsActivated OrElse DateTime.Now - DeActivation < New TimeSpan(0, 0, 1) Then
Me.WindowState = FormWindowState.Minimized
Else
Me.Activate()
End If
End If
End Sub
End Class
除非必须将表单的ShowInTaskbar属性设置为False,否则这是一个相当不愉快的黑客攻击。可以有一个任务栏按钮,并在启动时仍然保持表单不可见。检查this answer方法。