2011-04-30 72 views
0

我正在写一个程序在vb.net使用系统托盘,我想实现的是以下内容。帮助积极的形式

如果系统托盘图标被点击,它应该最小化/恢复表单。 (这我可以做) 我坚持的一点是,如果表单是'开放'而没有集中,我希望它获得焦点而不是最小化。

我似乎无法找到任何测试我需要看看如果表单不是处于最小化状态,并没有焦点。

欢迎任何建议。

谢谢

+0

经过一番搜索后,我想我有一个答案我的问题。虽然我遇到了另一个相关的问题。因为单击任务栏图标的行为会导致表单失去焦点,所以我的测试总是返回focus = false。所以我需要看看在鼠标点击之前它是否有焦点。 – user732467 2011-04-30 15:06:11

回答

0

通过监听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的方法。

+0

谢谢。这看起来像我后,是在一半,但没有考虑使用时间。 – user732467 2011-04-30 17:58:24