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);
}
}
Llame a los métodos GetChildIndex
y SetChildIndex
de la colección Controls
de los padres.
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);