我正在写一个程序在vb.net使用系统托盘,我想实现的是以下内容。帮助积极的形式
如果系统托盘图标被点击,它应该最小化/恢复表单。 (这我可以做) 我坚持的一点是,如果表单是'开放'而没有集中,我希望它获得焦点而不是最小化。
我似乎无法找到任何测试我需要看看如果表单不是处于最小化状态,并没有焦点。
欢迎任何建议。
谢谢
我正在写一个程序在vb.net使用系统托盘,我想实现的是以下内容。帮助积极的形式
如果系统托盘图标被点击,它应该最小化/恢复表单。 (这我可以做) 我坚持的一点是,如果表单是'开放'而没有集中,我希望它获得焦点而不是最小化。
我似乎无法找到任何测试我需要看看如果表单不是处于最小化状态,并没有焦点。
欢迎任何建议。
谢谢
通过监听Activate和Deactivate事件跟踪窗体激活状态。一个复杂因素是,当您单击图标时,表单将被取消激活。通过记录它发生的时间来解决这个问题。像这样:
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的方法。
谢谢。这看起来像我后,是在一半,但没有考虑使用时间。 – user732467 2011-04-30 17:58:24
经过一番搜索后,我想我有一个答案我的问题。虽然我遇到了另一个相关的问题。因为单击任务栏图标的行为会导致表单失去焦点,所以我的测试总是返回focus = false。所以我需要看看在鼠标点击之前它是否有焦点。 – user732467 2011-04-30 15:06:11