не может последовательно переносить форму на передний план

Я попробовал несколько вещей, но ни один из них не работает...

У меня есть Форма, которая должна прибыть перед всем 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 контекстное меню как возможная идея для обходного решения, но это не помогает.

Какие-либо идеи о том, как сделать это или работу вокруг этого?

6
задан Tim S. Van Haren 6 January 2010 в 15:17
поделиться

3 ответа

а что, если сделать это с помощью MouseUp?

5
ответ дан 10 December 2019 в 02:48
поделиться

Используйте 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;
        }

1
ответ дан 10 December 2019 в 02:48
поделиться

Вот как я это сделал. Обратите внимание, что 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();
}
3
ответ дан 10 December 2019 в 02:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: