2010-07-09 19 views
23

J'écris un TextBox personnalisé qui lors de la mise au point change son style de bordure. Comme l'ajout d'une bordure fait chevaucher le contrôle avec ceux qui l'entourent, j'apporte temporairement la zone de texte au début de la boîte de dialogue (en utilisant textBox.BringToFront()).Comment faire pour définir l'ordre Z d'un contrôle en utilisant WinForms

Cependant, une fois l'édition terminée et la mise au point est perdue, je voudrais renvoyer le contrôle à sa position d'origine dans l'ordre Z.

Est-ce possible (de préférence d'une manière simple!)

Répondre

33

Appel les méthodes GetChildIndex et SetChildIndex de collection Controls du parent.

+1

Grande - Egaré par BringToFront() Je me regardais dans le mauvais endroit pour ces méthodes: à méthodes, pas des méthodes contrôles du parent du contrôle . Merci. –

+2

il n'y a pas d'exemple –

+0

Pas besoin d'exemple, la réponse en elle-même c'est assez! – Caverna

16

Il n'y a pas d'ordre Z comme dans VB, mais vous pouvez utiliser les méthodes GetChildIndex et SetChildIndex pour obtenir et définir leurs index manuellement.

Here Voici un exemple d'utilisation. Vous aurez probablement besoin de conserver un enregistrement de chaque index de contrôle, afin de pouvoir le rétablir quand il aura fini.

Quelque chose comme ceci est probablement ce que vous êtes après:

// 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

Tout change lorsque vous dynamisez les contrôles (in) visibles. Définissez 'textbox.Visible = true' et il aura l'index 0. Il complète ignore l'ordre du contour du document. Cela m'a pris un moment pour comprendre :) – FrankyHollywood

+0

Essayait de comprendre cela aussi. Ce commentaire m'a aidé. THX –