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

 .NET Discussion :

Supprimer des controles personnalisés


Sujet :

.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut Supprimer des controles personnalisés
    Bonjour,

    Pour un programme, j'ai créer des contrôles personnalisés. A certains moments du programme, j'en rajoute sur la feuille principale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form.Controls.Add(CtlPerso)
    Plus tard, je voudrais supprimer tous les contrôles CtlPerso de ma feuille appartenant à la classe ClsPerso...

    Je sais pas comment faire...

    Merci de votre aide!

    Cam'

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach (Control c in this.Controls)
    {
     if( c is maClasse)
        this.controls.Remove(c);
    }
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    Merci pour ta réponse rapide.

    J'avais oublié de préciser que je suis en VB.NET

    Cependant, j'arrive pas à voir comment formuler...

    Pour créer mes controles, j'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim A as ClsPerso.CtlPerso
    Form1.Control.Add(A)
    Donc je suppose qu'avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1.Control.Remove(A)
    ça doit fonctionner.

    Mais je n'arrive pas à le faire pour tous... vu que le nombre est pas fixe...

    Il faut mettre quoi dans le For Each?

    Si j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For each c in Me.Controls
    Je le déclare comment le c?

    Merci pour ta patience,

    Cam'

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    Ok alors j'ai compris un peu ton code ^^

    J'ai donc tapé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim c as Control
    For Each c in Me.Controls
         If c Is ??? Then
              Me.Controls.Remove(c)
         End If
    Next
    par contre, je trouve pas quoi mettre pour la condition...
    Bien sûr, si je mets pas la condition, j'ai bien tous les contrôles de la feuille qui s'efface...

    Cam'

  5. #5
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim c as Control
    For Each c in Me.Controls
         If c Is ClsPerso.CtlPerso Then
              Me.Controls.Remove(c)
         End If
    Next
    tout simplement
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    J'avais essayé ta solution... Il souligne le ClsPerso.CtlPerso et met : "CtlPerso est un type dans ClsPerso et ne peut pas être utilisé en tant qu'expression".

    Moi y en a pas tout comprendre à ce qu'il dit (Débutant détecté...)

    Je pense que c'est parceque ClsPerso.CtlPerso est une classe et que c est un contrôle... pourtant je vois pas comment s'appelle le controle alors?

    Cam'

  7. #7
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    c'est la faute à VB.Net, c'est tout caca

    For Each c as Control in Me.Controls
    If TypeOf c Is ClsPerso.CtlPerso Then
    Me.Controls.Remove(c)
    End If
    Next
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    Merci, plus d'erreur...

    Par contre il supprime pas les contrôles voulus... il en supprime aucun... bizarre ça...

    Cam'

  9. #9
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    remet la declaration de control au dessus du foreach pour voir

    et ensuite en debug, regarde la valeur de "C" avant le if et ensuite dans le if (pour voir s'il rentre au moins une fois dedans)
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    Alors en passant en debug, les différentes valeurs de c ont été :

    ToolStrip, MenuStrip, SplitContainer...

    Mais aucun Textbox, label ou autre... qui sont tous à l'interieur de ces containers...

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    Ok donc je me suis placé au bon endroit... c'est à dire à l'intérieur du container qu'il fallait.

    Maintenant, il supprime, mais pas tous les controles...

    Dans mon exemple, j'en ai 2. Il en supprime qu'un sur les deux, si je réeffectue l'opération, il supprime le dernier.
    J'ai l'impression, que comme il supprime un controle, il y a un controle en moins qu'au début, du coup il croit qu'il a fini sa boucle For...

    Enfin c'est l'impression que ça me donne!

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    Ok résolu!

    A l'intérieur de la condition, j'ai rajouté un Goto pour lui refaire faire la boucle. C'est pas très élégant, y avait ptet une autre solution...

    En tout cas, ça fonctionne!

    Merci de ton aide!

  13. #13
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    un goto? nanana. faut faire une methode recursive.
    donc garde ce code de coté mais essaie de coder la methode recursive
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    Avec la récursivité la solution serait du genre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If TypeOf c is ClsPerso.CtlPerso Then
        Supprimer(c)
    EndIf
    et dans un module

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Public Sub Supprimer(c as Control)
       Form1.Remove(c)
       For Each c in Form1.Controls
           If TypeOf c is ClsPerso.CtlPerso Then
               Supprimer(c)
            End If
        Next
    End Sub
    J'ai un peu de mal avec le concept de récursivité...

    Sinon tant que j'y suis j'ai posté un autre problème à propos des contrôles personnalisés Ici

    Cam'

  15. #15
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    oui la recursivité, je trouvais ca bizarre pour mon cerveau quand j'ai commencé puis après c'est juste un rappel...récursif. là, ta méthode est bonne, il manque juste la ligne

    par contre, tu peux pas supprimer le control avant d'enlever ses enfants. enfin c'est pas logique je crois car tu auras un nullexception.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub Supprimer(c as Control)
       For Each c in Form1.Controls
           If TypeOf c is ClsPerso.CtlPerso Then
               Supprimer(c)
               //cette ligne là doit être plutot là
               Form1.Remove(c)
            End If
        Next
    End Sub
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    Oui effectivement ça paraît plus logique comme cela et ça fonctionne bien!

    Merci de ton aide! Grâce à toi mon tit programme avance doucement mais surement :p

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

Discussions similaires

  1. [Débutant] Supprimer des controls de la form
    Par shayw dans le forum VB.NET
    Réponses: 9
    Dernier message: 03/02/2014, 14h34
  2. Réponses: 7
    Dernier message: 07/04/2008, 10h37
  3. Supprimer dynamiquement des controles
    Par vciofolo dans le forum IHM
    Réponses: 2
    Dernier message: 03/05/2007, 10h28
  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