2017-02-22 20 views
0

У меня есть приложение .Net winforms (C#) с его основной формой (форма A) и открывает другие формы как немодальные (чтобы пользователь мог работать либо с основная форма или детская форма)Окно другого процесса происходит между двумя моими формами

В некоторых случаях дочерняя форма (форма B) открывает еще одну всплывающую форму (форма C). Когда это всплывающее окно закрывается, между моей основной формой и дочерней формой появляется другое окно из другого приложения (например, chrome, outlook, VS). Обычно это другое окно - это то, что было прямо под моим главным окном.

Перед закрытием формы, Z-порядок: Внешний вид, форма А, форма В, форма С

После закрытия формы с, изменения г порядка на: Формы А, Outlook, формы B

Я не хотел специально указать BringToFront() мою форму A, потому что в данный момент может быть много экземпляров формы B, и я не хочу делать свою форму A над формой B.

Любая идея, что может вызвать такое поведение? Есть ли способ убедиться, что все формы моего приложения находятся над другими окнами?

ответ

1

Вы можете создать дочерние формы, принадлежащие форме, которая их открывает. Это будет поддерживать относительный z-порядок.

public partial class FormA : Form 
    { 

    private void button1_Click(object sender, EventArgs e) 
     { 
     FormB f = new FormB(); 
     f.Show(this); 
     } 
    } 

public partial class FormB : Form 
    { 

    private void button1_Click(object sender, EventArgs e) 
     { 
     FormC f = new FormC(); 
     f.Show(this.Owner); 
     } 
    } 

Это имеет побочный эффект, когда владелец одной из форм закрыт/минимизированы, находящиеся в его собственности формы также будут закрывать/минимизировать.

+0

А также это имеет побочный эффект, если я открываю другой экземпляр формы B, я не могу получить доступ к предыдущему экземпляру формы B. Мне нужно иметь доступ ко всем формам в любое время :( – Anuruddha

+0

@Anuruddha, в этом нет ничего, что препятствовало бы доступу к предыдущим экземплярам. Единственное предостережение в том, что окно владельца (FormA в этом случае) не может покрыть принадлежащее окну . [Здесь] (https://msdn.microsoft.com/en-us/library/system.windows.window.owner%28v=vs.110%29.aspx) представлено хорошее резюме отношений с владельцами окон. ? f = 255 & MSPPError = -2147217396 # Замечания), его для окна WPF, но этот список применим и к окнам WinForm. – TnTinMn