Как сделать так, чтобы окно всегда оставалось на вершине в .Net? - PullRequest
79 голосов
/ 25 марта 2009

У меня есть приложение C # winforms, которое запускает макрос в другой программе. Другая программа будет постоянно всплывать в окнах и вообще заставлять вещи выглядеть, из-за отсутствия лучшего слова, сумасшедшими. Я хочу реализовать кнопку отмены, которая остановит процесс, но я не могу заставить окно оставаться на вершине. Как мне это сделать в C #?

Редактировать: я пробовал TopMost = true; , но другая программа продолжает показывать свои собственные окна поверх. Есть ли способ отправлять мое окно наверх каждые n миллисекунд?

Редактировать: Я решил эту проблему, добавив значок в системном трее, который отменит процесс, дважды щелкнув по нему. Значок на панели задач не скрывается. Спасибо всем, кто откликнулся. Я прочитал статью о том, почему нет окна «super-on-top» ... оно логически не работает.

Ответы [ 12 ]

3 голосов
/ 29 июля 2016

Вот эквивалент SetForegroundWindow:

form.Activate();

Я видел людей, которые делают странные вещи, такие как:

this.TopMost = true;
this.Focus();
this.BringToFront();
this.TopMost = false;

http://blog.jorgearimany.com/2010/10/win32-setforegroundwindow-equivalent-in.html

1 голос
/ 31 мая 2018

Я знаю, что это старый, но я не видел этот ответ.

В окне (xaml) добавить:

Deactivated="Window_Deactivated"

В коде для Window_Deactivation:

private void Window_Deactivated(object sender, EventArgs e)
    {
        Window window = (Window)sender;
        window.Activate();
    }

Это будет держать ваше окно на вершине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...