Диалоги WinForms с TopMost = true - PullRequest
       35

Диалоги WinForms с TopMost = true

2 голосов
/ 13 ноября 2009

У меня есть диалоговое окно, реализованное в WinForms, которое отображается в виде диалогового окна уведомления в правом нижнем углу экрана. Проблема в том, что всякий раз, когда отображается, он получает фокус, и это происходит только тогда, когда TopMost = true. Как я могу решить это?

Ответы [ 3 ]

4 голосов
/ 13 ноября 2009

Вам необходимо наследовать от Form и переопределить пару свойств:

[Flags]
enum WS_EX
{
    TOPMOST = 0x00000008,
}

class TopMostForm : Form
{
    protected override CreateParams CreateParams
    {
        get
        {
            var baseParams = base.CreateParams;
            baseParams.ExStyle |= (int)WS_EX.TOPMOST;
            return baseParams;
        }
    }

    protected override bool ShowWithoutActivation
    {
        get { return true; }
    }
}

Тогда просто просто Показать () в этой форме, и она будет отображаться как самая верхняя и неактивная.

1 голос
/ 13 ноября 2009

Показать диалог с Show вместо ShowDialog. ShowDialog будет самым верхним, пользователь должен щелкнуть по нему, прежде чем делать что-то еще (модальное) Шоу покажет как обычно.

0 голосов
/ 13 ноября 2009

Как насчет этой стратегии:

  1. Показать при запуске, а затем сразу:
  2. Скрыть это с ShowWindow (SW_HIDE)
  3. Никогда не закрывайте форму, просто пусть она будет невидимой
  4. Показать с помощью ShowWindow (SW_SHOWNOACTIVATE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...