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 :

Enlever des Controls


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Scientist
    Inscrit en
    Mai 2013
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 110
    Par défaut Enlever des Controls
    Bonsoir,

    Je cree des Boutons dynamiquement (qu'on peut bouger avec MouseMove) avec possibilities de les enlever tous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub ClearPanel()
            For Each b As Button In myPanel.Controls
                myPanel.Controls.Remove(b)
                RemoveHandler aButton.MouseDown, AddressOf aButton_MouseDown
                RemoveHandler aButton.MouseUp, AddressOf aButton_MouseUp
                RemoveHandler aButton.MouseMove, AddressOf aButton_MouseMove
            Next
    End Sub
    Cependant, cela ne marche pas toujours tres bien. Il faut que je passe au moins 3 fois dans la routine "ClearPanel" pour tout enlever (24 au total) ou repeter 3 fois le ForEach dans cette Sub.

    Je ne comprends pas pourquoi un seul passage ne fait pas le travail, y-a-t-il une explication a ce probleme? Ou bien, ce code qui me parait tres simple n'est pas bon???

    De plus, dois-je enlever les evenements crees dynamiquement avec "RemoveHandler" dans cette routine? Je pense que oui, mais si vous pouvez confirmer ce detail.

    A+
    JLuc01

  2. #2
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Tu supprimes des items d'une liste que tu parcours, donc tu supprimes le 1er item, et là tu vas pour supprimer le second item, mais les collections se ré-ajustes, et le second item est venu combler le trou du 1er item supprimé, et le troisième est venu combler le trou du second (qui est maintenant 1er de la liste), donc c'est le 3éme qui est supprimé et ainsi de suite...

    Je ne sais pas si c'est très compréhensible, mais en gros, pas de suppression à l'intérieur de la liste que tu parcours.

    Le mieux serait de passer par un While.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            Dim i As Integer = 0
     
            While i <> Controls.Count
                If TypeOf Controls(i) Is Button Then
                    RemoveHandler Controls(i).MouseDown, AddressOf aButton_MouseDown
                    RemoveHandler Controls(i).MouseUp, AddressOf aButton_MouseDown
                    RemoveHandler Controls(i).MouseMove, AddressOf aButton_MouseDown
                    Controls.RemoveAt(i)
                Else
                    i += 1
                End If
            End While

  3. #3
    Membre très actif Avatar de The_Big_Lebowski
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 225
    Par défaut
    C'est une solution.
    Il est aussi possible de gérer les ajouts de contrôles via une collection de contrôles.
    Pointer sur un contrôle et le supprimer est moins aléatoire que de faire un for each comme le rappelle _Ez3kiel.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Est-ce que dans votre panel vous n'avez que des boutons ?
    Si oui, vous pouvez faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            For Each b As Button In myPanel.Controls
                RemoveHandler b.MouseDown, AddressOf aButton_MouseDown
                RemoveHandler b.MouseUp, AddressOf aButton_MouseUp
                RemoveHandler b.MouseMove, AddressOf aButton_MouseMove
            Next
            myPanel.Controls.Clear()
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  5. #5
    Membre confirmé
    Homme Profil pro
    Scientist
    Inscrit en
    Mai 2013
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 110
    Par défaut
    Bonsoir,

    _Ez3kiel, merci bien, j'ai parfaitement compris mon probleme maintenant et l'interet d'un "While" au lieu du "ForEach". Votre code est impeccable, ca marche.

    rv26t, tres bien devine, et c'est donc dans ce cas la beaucoup plus simple. Mais, la facon de faire de _Ez3kiel est plus generale.

    J'utiliserais toutefois la methode de rv26t, si simple que j'aurais du y penser.

    Merci encore a tous les 3. C'etait tres interessant pour moi.

    A+,
    JLuc01

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

Discussions similaires

  1. [VBA-E] Est il possible de creer dynamiquement des controles en VBA
    Par bbkenny dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 13/08/2004, 20h04
  2. Réponses: 5
    Dernier message: 07/07/2004, 16h05
  3. Comment peut on integer des controles dans un prog opengl
    Par franck31400 dans le forum OpenGL
    Réponses: 2
    Dernier message: 28/04/2004, 09h06
  4. [VB.Net] Faire du JS sur des contrôles côté serveur
    Par TagadaTsoin dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/11/2003, 15h51
  5. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 16h29

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