Я попробовал несколько вещей, но ни один из них не работает...
У меня есть Форма, которая должна прибыть перед всем Windows в нажатие на NotifyIcon. Таким образом, вот то, что я попробовал:
private void notifyIcon1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.TopMost = true;
this.BringToFront();
this.Focus();
this.TopMost = false;
}
}
Затем я пытался использовать SetForegroundWindow:
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern bool SetForegroundWindow(IntPtr hwnd);
путем добавления
SetForegroundWindow(this.Handle);
в конце, если блок.
Наконец, я видел, что то, когда это не работает, если я щелкаю правой кнопкой мыши по NotifyIcon и контекстному меню, открыто, я могу затем щелкнуть левой кнопкой по NotifyIcon, и это выявляет его.
Я попытался добавить этот код вначале:
cmsNotifyIcon.Show();
cmsNotifyIcon.Close();
Так, чтобы это показало и закрыло notifyIcon контекстное меню как возможная идея для обходного решения, но это не помогает.
Какие-либо идеи о том, как сделать это или работу вокруг этого?
Используйте Activate()
вместо Show(). Также, если ваша форма свернута, вы должны установить WindowState в WindowState.Normal (или любое другое состояние, в котором она была до свертывания).
private void notifyIcon1_Click(object sender, EventArgs e)
{
Activate();
// this is needed for minimized form to show
WindowState = FormWindowState.Normal;
}
Вот как я это сделал. Обратите внимание, что StartupWindowState
и HideWhenMinimized
являются закрытыми членами моей формы.
private void OnOpenTrayMenuItemClicked(object sender, EventArgs e) {
if (this.WindowState == FormWindowState.Minimized) {
this.WindowState = this.StartupWindowState;
this.ShowInTaskbar =
(this.HideWhenMinimized && (this.WindowState == FormWindowState.Minimized)) ? false : true;
this.Show();
}
this.Activate();
}