Comment définir L'ordre Z d'un contrôle en utilisant WinForms

j'écris une coutume TextBox qu'en se focalisant change son style de bordure.

comme l'ajout d'une bordure fait que le contrôle chevauche ceux qui l'entourent, j'amène temporairement la zone de texte à l'avant de la boîte de dialogue (en utilisant 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 d'une manière simple!)

25
demandé sur g t 2010-07-09 17:55:09
la source

3 ответов

appelez le GetChildIndex et SetChildIndex les méthodes du parent Controls de la collection.

36
répondu SLaks 2010-07-09 18:03:08
la source

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

Ici voici un exemple d'utilisation. Vous aurez probablement besoin de garder un enregistrement de chaque index des contrôles cependant afin que vous puissiez le remettre à lui quand il est terminé avec.

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);
19
répondu w69rdy 2015-10-21 15:31:42
la source

lorsqu'il est utilisé avec le FlowLayoutPanel, cela déplace un contrôle vers le haut ou vers 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);
        }
    }
0
répondu gVista 2018-04-04 20:01:35
la source

Autres questions sur