я просто использовал концепцию, а не реальный код, так что нп.

я есть приложение, которое находится в системном трее. Я хочу сделать это видимым, когда пользователь нажимает на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 # окно переключения, нажав NotifyIcon (значок на панели задач)

ОБНОВЛЕНИЕ: Решение, которое я разместил, обнаруживает только, если мышь пользователя находится над значками в трее на панели задач, поэтому, если вы нажмете на любом другом трее,onDeactivated событие не будет запущено. Я хочу получить ту же функциональность, что и приложение системного тома.

Ответы на вопрос(1)

Ваш ответ на вопрос