J'écris une coutume TextBox
qui, après avoir obtenu le focus, change son style de bordure.
L'ajout d'une bordure faisant en sorte que le contrôle se chevauche avec ceux qui le bordent, j'apporte temporairement la zone de texte au début de la boîte de dialogue (à l'aide de textBox.BringToFront()
).
Cependant, une fois l’édition terminée et la mise au point perdue, j’aimerais renvoyer le contrôle à sa position initiale dans l’ordre Z.
Est-ce possible (de préférence de manière simple!)
Appelez les méthodes GetChildIndex
et SetChildIndex
de la collection Controls
du parent.
Il n’existe pas d’ordre Z identique à VB, mais vous pouvez utiliser les méthodes GetChildIndex
et SetChildIndex
pour obtenir et définir leurs index manuellement.
Ici il y a un exemple d'utilisation. Vous aurez probablement besoin de conserver un enregistrement de chaque index de contrôles afin de pouvoir le restaurer une fois terminé.
Quelque chose comme ceci est probablement ce que vous recherchez:
// 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);
Utilisé avec FlowLayoutPanel, cela déplacera un contrôle vers le haut ou le bas
/// <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);
}
}