Как полностью вывести WinForm на передний план при активации - PullRequest
0 голосов
/ 10 августа 2011

У меня есть два диалоговых окна, FormA и FormB.Я использую следующий код, чтобы показать (немодально) FormB.Код представляет собой нажатие кнопки, выполненное из FormA.

    private void button_Click(object sender, EventArgs e)
    {
        FormB fB = new FormB();
        fB.Show(this); // FormA is the owner of FormB
    }

. Проблема в том, что когда FormB превышает FormA на экране, если я нажимаю FormA, он активируется, ноне выведен на фронт.На самом деле FormB всегда находится над FormA

Forms

Знаете ли вы, почему и как изменить это поведение, не удаляя свойство владельца?

ПРИМЕЧАНИЕ: Это упрощение моей проблемы.В реальной проблеме FormA - это окно Windows Explorer, а FormB - управляемая WinForm, но поведение такое же.Если я не передаю IWin32Window на Show(), он работает нормально, но если я закрываю A, B не закрывается и не отвечает на события (см. Следующую запись ).

Ответы [ 3 ]

2 голосов
/ 10 августа 2011

Вы не можете сделать это без удаления свойства владельца.

Из документации: Собственные формы также никогда не отображаются за формой их владельца.

Источник: http://msdn.microsoft.com/en-us/library/system.windows.forms.form.owner.aspx

Для вашей конкретной проблемы, почему вы не слушаете событие Close, а затем явно закрываете свою собственную форму?

0 голосов
/ 10 августа 2011

Хак - это установить WindowState = FormWindowState.Minimized в методе OnDeactivate FormB (или переопределить его).

  protected override void OnDeactivate(EventArgs e)
  {
        base.OnDeactivate(e);
        this.WindowState = FormWindowState.Minimized;
  }

Не знаю, хотите ли вы этого.

0 голосов
/ 10 августа 2011

Для свойства TopMost можно установить значение true.

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