IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Supprimer un control par le code.


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut Supprimer un control par le code.
    Bonjour,

    Je ne me souviens plus comment supprimer un contrôle par le code, quand le contrôle en question a était créer par le code.

    Sur ce code aux lignes 51 à 54 j'ai:
    Warning Variable 'labelCorner' is used before it has been assigned a value. A null reference exception could result at runtime.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
        Private Sub AddCorners(ByVal sender As Object, ByVal e As System.EventArgs) Handles TrackPage.Enter
     
            Dim numberOfCorner As Integer
            Dim latestNumberOfCorner As Integer
            Dim labelCorner As Label
            Dim labelSpeed As Label
            Dim cornerName_tbox As TextBox
            Dim cornerSpeed_tbox As TextBox
     
            numberOfCorner = CInt(Me.NumberOfCorners_tbox.Value)
     
            If numberOfCorner - latestNumberOfCorner > 1 Then
     
                For i = latestNumberOfCorner + 1 To numberOfCorner Step 1
                    labelCorner = New Label
                    With labelCorner
                        .Text = "Corner " & i.ToString
                        .Font = New System.Drawing.Font("ab", 8, FontStyle.Bold)
                        .Size = New System.Drawing.Size(70, 15)
                        .Location = New System.Drawing.Point(17, 84 + (25 * i - 1))
                    End With
     
                    labelSpeed = New Label
                    With labelSpeed
                        .Text = "[km/h]"
                        .Font = New System.Drawing.Font("ab", 8, FontStyle.Bold)
                        .Location = New System.Drawing.Point(362, 84 + (25 * i - 1))
                    End With
     
                    cornerName_tbox = New TextBox
                    With cornerName_tbox
                        .Name = "Corner" & i.ToString & "_tbox"
                        .Size = New System.Drawing.Size(200, 20)
                        .Location = New System.Drawing.Point(90, 83 + (25 * i - 1))
                    End With
     
                    cornerSpeed_tbox = New TextBox
                    With cornerSpeed_tbox
                        .Name = "Speed" & i.ToString & "_tbox"
                        .Size = New System.Drawing.Size(60, 20)
                        .Location = New System.Drawing.Point(296, 83 + (25 * i - 1))
                    End With
     
                    TrackPage.Controls.Add(labelCorner)
                    TrackPage.Controls.Add(labelSpeed)
                    TrackPage.Controls.Add(cornerName_tbox)
                    TrackPage.Controls.Add(cornerSpeed_tbox)
                Next
     
            ElseIf numberOfCorner - latestNumberOfCorner < 1 Then
                TrackPage.Controls.Remove(labelCorner)
                TrackPage.Controls.Remove(labelSpeed)
                TrackPage.Controls.Remove(cornerName_tbox)
                TrackPage.Controls.Remove(cornerSpeed_tbox)
            End If
     
            latestNumberOfCorner = numberOfCorner
        End Sub

  2. #2
    Membre expérimenté Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Points : 1 338
    Points
    1 338
    Par défaut
    Salut

    Tu dois d'abord faire un FindControl() puis le Remove().

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par bizet Voir le message
    Salut

    Tu dois d'abord faire un FindControl() puis le Remove().
    Mais comment faire pour désigner le contrôle à retirer?

    La méthode remove n'accept un argument qu'en tant que "controle"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       ElseIf numberOfCorner - latestNumberOfCorner < 1 Then
     
                TrackPage.Controls.Find("TrackPage", False)
                TrackPage.Controls.Remove("corner" & i.ToString & "_label")
     
            End If

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Points : 478
    Points
    478
    Par défaut
    Il te suffit d'instancier tes contrôles quand tu les déclare, ainsi même si tu ne les affiche pas tu pourras tout de même les supprimer.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Shadam Voir le message
    Il te suffit d'instancier tes contrôles quand tu les déclare, ainsi même si tu ne les affiche pas tu pourras tout de même les supprimer.
    J'ai essayer un truc, mais je n'ai pas compris.

    je les déclare comme çà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     Dim labelCorner As New Label
                    With labelCorner
                        .Name = "corner" & i.ToString & "_label"
                        .Text = "Corner " & i.ToString
                        .Font = New System.Drawing.Font("ab", 8, FontStyle.Bold)
                        .Size = New System.Drawing.Size(70, 15)
                        If i > 20 Then
                            .Location = New System.Drawing.Point(450, 84 + (25 * (i - 21)))
                        Else
                            .Location = New System.Drawing.Point(17, 84 + (25 * (i - 1)))
                        End If
                    End With
    Donc ce qui les différencie c'est leur nom (grace au "i"), et peut être leur index ou quelque chose comme çà.

    Alors comment faire référence à un label particulier dans le méthode remove?

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Points : 478
    Points
    478
    Par défaut
    Et bien en les nommant dans le remove... Tu dois bien savoir lesquels tu doit supprimer non? Ou alors tu les supprimes au petit bonheur la chance peut être?

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Shadam Voir le message
    Et bien en les nommant dans le remove... Tu dois bien savoir lesquels tu doit supprimer non? Ou alors tu les supprimes au petit bonheur la chance peut être?
    J'ai trouvé en un coup de google (shame on me)

    Il faut utiliser .RemoveByKey qui utilise un argument en tant que string, où on peut faire reference au control par son nom.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     TrackPage.Controls.RemoveByKey("speed" & (numberOfCorner + 1).ToString & "_label")
    Voilà alors que dans le cas d'un .remove c'est en tant que system.windows.forms.controls

  8. #8
    Membre expérimenté Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Points : 1 338
    Points
    1 338
    Par défaut
    salut,

    juste pour préciser, la méthode Remove() prend en paramètre un controle, c'est justement pour cela que je te disais de récupérer ce contrôle par la méthode FindControl()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Label monLabel = xxxx.FindControl("IdDeMonLabel");
    xxxx.Remove(monLabel);

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par bizet Voir le message
    salut,

    juste pour préciser, la méthode Remove() prend en paramètre un controle, c'est justement pour cela que je te disais de récupérer ce contrôle par la méthode FindControl()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Label monLabel = xxxx.FindControl("IdDeMonLabel");
    xxxx.Remove(monLabel);
    C'est juste, et j'avais mal interpreté l'argument "key" as string

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/09/2014, 11h19
  2. Suppression d'un controle par code
    Par SandyF dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 16/07/2010, 14h01
  3. Réponses: 2
    Dernier message: 19/05/2009, 15h16
  4. Accéder au template d'un controle par le code
    Par Gregory.M dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 31/10/2008, 20h23
  5. Remplacer des controles ajax dans un site ASP .net par des codes javascript
    Par Contact2012 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/09/2008, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo