2010-07-09 14 views
23

Estoy escribiendo un TextBox personalizado que al obtener el foco cambia su estilo de borde.Cómo establecer el orden Z de un control usando WinForms

Como adición de una frontera hace que el control se superponen con los vecinos que, traigo temporalmente el cuadro de texto a la parte delantera del cuadro de diálogo (usando textBox.BringToFront()).

Sin embargo, una vez que se completa la edición y se pierde el foco, me gustaría devolver el control a su posición original en el orden Z.

Es esto posible (preferiblemente de una manera sencilla!)

Respuesta

33

de llamadas y los GetChildIndexSetChildIndex métodos de recolección de los padres Controls.

+1

Gran - desviados por BringToFront() me miraba en el lugar equivocado para estos métodos: en los métodos del control, no métodos de controles de los padres . Gracias. –

+2

no hay ningún ejemplo –

+0

¡No hay necesidad de un ejemplo, la respuesta es suficiente! – Caverna

16

No hay orden Z como en VB, pero puede usar los métodos GetChildIndex y SetChildIndex para obtener y configurar sus índices manualmente.

Here hay un ejemplo de cómo usarlo. Es probable que necesite mantener un registro de cada índice de controles para que pueda volver a configurarlo cuando haya terminado.

Algo como esto es probablemente lo que está buscando:

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

Todo cambia cuando dinámicamente haces controles (en) visibles. Establezca 'textbox.Visible = true' y tendrá el índice 0. Complete ignora el orden del contorno del documento. Esto me tomó un tiempo para entender :) – FrankyHollywood

+0

Estaba tratando de resolver esto también. Este comentario me ayudó. Gracias –

Cuestiones relacionadas