2010-07-09 31 views
23

Sto scrivendo un numero personalizzato TextBox che al momento di ottenere lo stato attivo modifica lo stile del bordo.Come impostare un ordine Z di un controllo utilizzando WinForms

Come l'aggiunta di un bordo fa sì che il controllo si sovrapponga a quelli ad esso vicini, ho temporaneamente portato la casella di testo nella parte anteriore della finestra di dialogo (utilizzando textBox.BringToFront()).

Tuttavia, una volta completata la modifica e la messa a fuoco è persa, desidero inviare il controllo nella posizione originale nell'ordine Z.

Questo è possibile (di preferenza in modo semplice!)

risposta

33

chiamate le GetChildIndex e SetChildIndex metodi di raccolta del genitore Controls.

+1

Grande - sviati da BringToFront() ho guardato nel posto sbagliato per questi metodi: a metodi del controllo, non i metodi controlli dei genitori . Grazie. –

+2

non c'è alcun esempio –

+0

Non c'è bisogno di esempio, la risposta è di per sé è abbastanza! – Caverna

16

Non esiste un ordine Z come in VB, ma è possibile utilizzare i metodi GetChildIndex e SetChildIndex per ottenere e impostare manualmente gli indici.

Here c'è un esempio di come usarlo. Probabilmente avrai bisogno di tenere un registro di ogni indice dei controlli, in modo che tu possa reimpostarlo quando ha finito.

Qualcosa di simile a questo è probabilmente quello che stai dopo:

// Get the controls index 
int zIndex = parentControl.Controls.GetChildIndex(textBox); 
// Bring it to the front 
textBox.BringToFront(); 
// Do something... 
// Then send it back again 
parentControl.Controls.SetChildIndex(textBox, zIndex); 
+2

Tutto cambia quando si rendono dinamici i controlli (in) visibili. Imposta "textbox.Visible = true" e avrà indice 0. Completa l'ordine ignora dalla struttura del documento. Mi ci è voluto un po 'per capire :) – FrankyHollywood

+0

Cercavo di capire anche questo. Questo commento mi ha aiutato. Grazie –

Problemi correlati