У меня есть приложение, которое находится в системном трее.Я хочу сделать его видимым, когда пользователь нажимает на 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
вызывается до вызова click, что скрывает форму и notifyIcon1_MouseClicked
, а не просто повторный вызов.показывает это.Если бы я мог определить, был ли потерян фокус из-за нажатия на notifyIcon
или в другом месте, это решило бы проблему.
Я провел исследование и обнаружил аналогичную нить, но решение просто обнаружил, еслиположение мыши над лотком, когда вызывается onDeactivated
: * Переключение окна C # по щелчку NotifyIcon (значок на панели задач)
ОБНОВЛЕНИЕ: Размещенное мной решение обнаруживает, только если мышь пользователя находится надЗначки в трее на панели задач, поэтому если вы нажмете на любой другой трей, событие onDeactivated
не будет запущено.Я хочу получить ту же функциональность, что и приложение системного тома.