帮助活动表格

时间:2011-04-30 14:29:34

标签: vb.net

我正在vb.net中编写一个使用系统托盘的程序,我想要实现的是以下内容。

如果单击系统托盘图标,则应最小化/恢复表单。 (我可以这样做) 我坚持的一点是,如果表格是'开放'而没有聚焦,我希望它得到关注而不是最小化。

如果表单没有处于最小化状态且没有焦点,我似乎无法找到任何可以进行测试的内容。

欢迎任何建议。

由于

1 个答案:

答案 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方法。