2010-11-17 21 views
7

Ho tre forme.Nascondere tutti i moduli aperti

Diciamo che A, B, C.

Modulo A apre modulo B e modulo B poi apre forma C.

pulsante ho aggiunto Nascondi tutte le forme aperte in forma C.

Come nascondere tutti e tre i moduli con questo pulsante?

So che un modo è usare ShowWindow Api, ma non voglio usare le chiamate Api.

Modifica: Grazie a SoMoS.

for (int i = Application.OpenForms.Count - 1; i >= 0; i += -1) 
{ 
    if (!object.ReferenceEquals(Application.OpenForms[i], this)) 
    { 
      Application.OpenForms[i].Hide(); 
    } 
} 
this.Hide(); 

O

In forma A (grazie a ho1)

B frm = new B(); 
frm.Owner = this; 
frm.Show(); 

Nel modulo B

C frm = new C(); 
frm.Owner = this; 
frm.Show(); 

In evento click del pulsante forma di C.

Owner.Owner.Hide(); 
Owner.Hide(); 
Hide(); 

O grazie alla Wim Coenen

foreach (Form var in Application.OpenForms) 
{ 
    var.Hide(); 
} 

Grazie.

+3

Strano come si può individuare un programmatore C++ immediatamente dal modo in cui scrivono i loro loop C#. Perché non solo 'foreach (var form in Application.OpenForms) form.Hide();'? –

+0

@ Wim Coenen Grazie per il suggerimento. – Searock

risposta

7

Hai solo bisogno di accedere a questa collezione:

Application.OpenForms 

Poi basta per scorrere tutti gli elementi e nascondere quelli che si desidera (è possibile controllare in base al titolo, per esempio) o semplicemente nascondere tutti .

Spero che aiuti.

3

Questo funziona:

Owner.Owner.Hide(); 
Owner.Hide(); 
Hide(); 

Oppure, se siete incerti quante forme ci sarà nella catena si può solo avere un metodo ricorsivo.

Sebbene questo dipenda dal fatto che A sia il proprietario di B ecc., Che è possibile organizzare inviando this come parametro alle chiamate a Show quando si visualizzano i moduli.

+0

Non so perché sto ricevendo un errore "Riferimento oggetto non impostato su un'istanza di un oggetto". Funziona solo con le forme Mdi? – Searock

+0

Si otterrebbe quell'errore se si sta tentando di chiamare un metodo di un oggetto quando quell'oggetto è nullo, ad esempio se un modulo non ha un proprietario. –

+0

I moduli non hanno un proprietario perché non sono moduli di dialogo. Un altro modo deve essere usato. –

0

Invece di nascondere tutti i moduli, è possibile utilizzare il fatto che riduce al minimo un modulo, riduce automaticamente a icona tutte le forme figlio. Quindi, una volta C.Owner = B, B.Owner = A, si potrebbe utilizzare (nel vostro Click gestore in A):

WindowState = FormWindowState.Minimized 
-2
Form2 NewForm = new Form2(); 
this.Hide(); //Hide Current form 
NewForm..ShowDialog(); //Show new form 
this.Show(); //Show Previous form After close new form 
Problemi correlati