Form.TopMost иногда работает - PullRequest
       3

Form.TopMost иногда работает

2 голосов
/ 15 февраля 2010

Похоже, что верхнее свойство иногда ставит мое приложение выше всех других, но на протяжении всего моего тестирования было очень странно, что иногда оно работает, и окно остается выше всех других окон (внешнего приложения), но иногда оно ничего не делает при все. Я даже пытался использовать флаг WS_EX_TOPMOST, установив его с помощью вызова Win32 API для setWindowLong (). Никто из них не держит окно сверху. Есть ли другой способ сохранить окно поверх каждого открытого окна, кроме самого верхнего? Или есть что-то еще, что я должен знать о самом верхнем?

Ответы [ 4 ]

5 голосов
/ 01 марта 2010

Я просто использую это:

form.TopLevel = true;
form.TopMost  = true;

, который делает окно верхним уровнем (т. Е. Оно не имеет родителя и ведет себя как основная форма приложения), а затем гарантирует, что оно является верхним (т. Е. Отображается выше всех других не верхних окон). Он всегда работал как шарм.

Обратите внимание, что я делаю это перед тем, как показать окно.

2 голосов
/ 15 февраля 2010

Мне повезло со следующими вызовами Win32 API:

const int SW_SHOW = 5;
BringWindowToTop(form.Handle);
ShowWindow(form.Handle, SW_SHOW);
1 голос
/ 15 февраля 2010

В дополнение к Form.TopMost вы можете попробовать Win32 API SetForegroundWindow .

[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32", CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
public static extern bool SetForegroundWindow(IntPtr hwnd);

Затем позвоните SetForegroundWindow(this.Handle).

0 голосов
/ 05 июля 2016

Работает 100%!

User32.AllowSetForegroundWindow((uint)Process.GetCurrentProcess().Id);
User32.SetForegroundWindow(Handle);
User32.ShowWindow(Handle, User32.SW_SHOWNORMAL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...