winform visual usuario tiempo studio propiedades net los formulario eventos ejecucion cómo crear controles control como clase botones añadir agregar agrega c# winforms textbox focus z-order

c# - visual - crear controles en tiempo de ejecucion vb net



Cómo establecer el orden Z de un control usando WinForms (3)

Estoy escribiendo un TextBox personalizado que al ganar el foco cambia su estilo de borde.

Como al agregar un borde hace que el control se superponga con los que lo rodean, llevo temporalmente el cuadro de texto al frente 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 posible (preferiblemente de una manera simple!)


Cuando se usa con el FlowLayoutPanel esto moverá un control hacia arriba o hacia abajo

/// <summary> /// When used with the FlowLayoutPanel this will move a control up or down /// </summary> /// <param name="sender"></param> /// <param name="UpDown"></param> private void C_On_Move(object sender, int UpDown) { //If UpDown = 1 Move UP, If UpDown = 0 Move DOWN Control c = (Control)sender; // Get the controls index int zIndex = _flowLayoutPanel1.Controls.GetChildIndex(c); if (UpDown==1 && zIndex > 0) { // Move up one _flowLayoutPanel1.Controls.SetChildIndex(c, zIndex - 1); } if (UpDown == 0 && zIndex < _flowLayoutPanel1.Controls.Count-1) { // Move down one _flowLayoutPanel1.Controls.SetChildIndex(c, zIndex + 1); } }



No hay orden Z como había 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 buscas:

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