8
votes

Y a-t-il un moyen de supprimer toutes les commandes d'une rangée dans TableLayOntPanel?

Je génère des contrôles pour une nappabilité de manière dynamique. J'ai un bouton Supprimer dans chaque ligne. Lorsque je clique sur cela, cette ligne doit être supprimée. XXX PRE>

Je n'ai pas montré le code pour ajouter des zones de texte similaires à ci-dessus. Je peux obtenir le numéro de ligne du bouton cliqué. Utilisation de cela, comment supprimer toutes les commandes de cette ligne. P>

Private Sub DeleteRow(ByVal sender As System.Object, ByVal e As System.EventArgs)
   Dim currentRow As Integer = CType(CType(sender, Button).Parent, TableLayoutPanel).GetRow(CType(sender, Button))
   'Using this currentRow, how to delete this Row
End Sub


0 commentaires

3 Réponses :


20
votes

Fondamentalement, vous devez:

  • Obtenez la liste des contrôles de cette ligne et supprimez-les de la TLP LI>
  • Retirez le style de ligne correspondant du TLP LI>
  • Définissez l'index de la nouvelle ligne pour chaque contrôle de chaque ligne après la suppression de li>
  • Décrément le RowCount LI> ul>

    Voici le code VB.NET pour faire de même. p>

    public static void RemoveRow(this TableLayoutPanel panel, int rowIndex)
    {
        panel.RowStyles.RemoveAt(rowIndex);
    
        for (int columnIndex = 0; columnIndex < panel.ColumnCount; columnIndex++)
        {
            var control = panel.GetControlFromPosition(columnIndex, rowIndex);
            panel.Controls.Remove(control);
        }
    
        for (int i = rowIndex + 1; i < panel.RowCount; i++)
        {
            for (int columnIndex = 0; columnIndex < panel.ColumnCount; columnIndex++)
            {
                var control = panel.GetControlFromPosition(columnIndex, i);
                panel.SetRow(control, i - 1);
            }
        }
    
        panel.RowCount--;
    }
    


2 commentaires

@emaillenin: merci pour la traduction à vb.net


Pourquoi ceux-ci doivent-ils supprimer le rowstyle?



3
votes

En plus des réponses de Johann et EMAILLENININ, vous devez modifier la ligne suivante

    if (control != null) panel.SetRow(control, i - 1);


0 commentaires

-7
votes

Pourquoi ce travail tant difficile ... Utilisation TableLayOntPanel.Controls.Clear ()

Cela effacera le contenu du panneau de table


1 commentaires

Qui est pas ce que l'OP demandait à faire.