我有一个在系统托盘中的应用程序。我想让它在用户点击时可见notifyIcon
,如果它已经不可见的话。如果它已经可见,则应将其隐藏。此外,当用户单击表单以外的任何其他位置时,表单应该隐藏(如果它是可见的)。
我的代码如下所示:
protected override void OnDeactivated(EventArgs e)
{
showForm(false);
}
public void showForm(bool show)
{
if(show)
{
Show();
Activate();
WindowState = FormWindowState.Normal;
}
else
{
Hide();
WindowState = FormWindowState.Minimized;
}
}
private void notifyIcon1_MouseClicked(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (WindowState != FormWindowState.Normal)
{
showForm(true);
}
}
}
代码的问题是onDeactivated
在点击调用之前被调用,它隐藏了表单,notifyIcon1_MouseClicked
而不仅仅是重新显示它。如果我可以检测到焦点是否由于单击notifyIcon
或其他地方而丢失,它将解决问题。
我已经完成了我的研究并找到了一个类似的线程,但解决方案只是检测到鼠标位置是否在onDeactivated
被调用时位于托盘上方:C# toggle window by click NotifyIcon (taskbar icon)
更新:我发布的解决方案仅检测用户的鼠标是否位于任务栏中的托盘图标上,因此如果您单击任何其他托盘,onDeactivated
则不会触发该事件。我想获得与系统音量应用程序相同的功能。