этот.TopMost = true не работает?

Я очень новичок в C# и все еще пытаюсь обойти его (с помощью некоторых очень терпеливых друзей).

у меня проблема с установкой новой формы windows TopMost свойство true. У меня есть две (почти) идентичные формы; 1, который работает нормально и один, который не делает.

обе формы имеют TopMost свойство имеет значение true.

  • Form1 показывает окно, и когда я пытаюсь щелкнуть за ним, форма мигает несколько раз и выдает окна бип.
  • Form2 также показывает форму, но когда я нажимаю за ней, форма сереет (или теряет фокус), и я могу щелкнуть по основной форме.

Я искал ответ на этот вопрос и нашел ответ, который предложил поставить this.TopMost = true; в событие загрузки формы, но это не сработало.

единственное, что я изменил, что может или не может иметь эффекта, это то, что Form1 был создан с .NET 4.5, установленным в свойствах и перед созданием Form2, я изменил это на .NET 3.5 (профиль клиента). Я пытался изменить его, но это не помогло. Прежде чем я удалю и снова создам Form2, есть ли у кого-нибудь идеи?

заранее большое спасибо. (Если вам нужна дополнительная информация, пожалуйста, просто дайте мне знать)

6 ответов


верхний - это свойство, которое используется, чтобы убедиться, что одно окно всегда отображается выше всех остальных в приложении. Примером Microsofts был инструмент поиска и замены.

разница, которую вы находите, заключается в том, что Form1 был создан как модальный диалог с помощью ShowDialog. Диалоговое окно "показать" гарантирует, что ваша форма должна быть закрыта, прежде чем все другие окна приложения могут быть использованы снова. Например; использование формы для получения пользовательских данных для ввода в родительскую базу данных форм.

показать используется, когда вы не возражаете, если ваш пользователь закончил свой диалог или нет, например, позволяя пользователю использовать некоторую утилиту (e.G таймер, секундомер), который поможет в рамках основной функции программы.

единственное визуальное различие, о котором я могу думать при использовании разных .NET-фреймворков, - это разные диалоговые окна, такие как OpenFileDialog, которые были обновлены во всей структуре


Это может помочь вам;

frm.TopLevel = true;
frm.TopMost = true;

эта ссылка от Microsoft подтверждает, что может быть ошибка в Windows 7 и Windows Server 2008 R2 я столкнулся с ней в системе Windows 7 Embedded и предоставленный патч исправить проблему, поэтому, пожалуйста, подумайте, чтобы взглянуть:)

http://support.microsoft.com/kb/2587473/en-us

надеюсь, что это поможет!


трудный способ сделать это! Работает 100%!

User32.AllowSetForegroundWindow((uint)Process.GetCurrentProcess().Id);
User32.SetForegroundWindow(Handle);
User32.ShowWindow(Handle, User32.SW_SHOWNORMAL);

У меня есть аналогичная проблема в моем решении. После использования перегруженной Show-функции она работала:

frm.TopLevel = true;
frm.TopMost = true;
frm.Show(this)

добавьте следующий код в тег показали событие:

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