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 :

Collection/Controle : tester membre unique


Sujet :

VB.NET

  1. #1
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut Collection/Controle : tester membre unique
    Bonjour,

    J'ai créé 1 controle hérité de Combo qui contient des colonnes (List of MyColumn).
    MyColumn est 1 classe qui a 3 propriétés (Name, visible, Width).
    Comment tester que l'on ne crée pas 2 fois 1 colonne du meme nom en mode design ?

    Si la classe MyColumn avait la ref.de la collection ce serait facile, mais lorsque l'on clique sur le Btn "Add" de l'éditeur de collection de VS, il n'ajoute pas l'élément ds la collection et je ne sais pas comment l'intercepter.
    Il semble mettre à jour la liste lors du clic sur "Ok", et je n'ai à priori aucun moyen d'intercepter le clic...

    Une nouvelle fois ça me parrait basique, mais je n'ai rien trouvé après 3 jours de recherche intensive.
    merci de votre aide

  2. #2
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 43
    Par défaut
    Bonjour,

    J'ai pas bien compris ce que tu dire. Peux tu expliquer un plus ton problème.
    A tu une Collection des colonnes dans le contrôle qui hérite du combo?.
    Tu peux bien Faire un Check sur cette Collection dans le design mode.

    Plus d'explication ça serai mieux.

  3. #3
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    Bonjour et merci pour ton interet pour ma question..

    A tu une Collection des colonnes dans le contrôle qui hérite du combo?.
    Oui

    Tu peux bien Faire un Check sur cette Collection dans le design mode.
    C'est ce que je cherche : comment ?

    Un peu de code aidera certainement :
    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
     
    Public Class MaCombo
        Inherits ComboBox
     
       Private f_ColList As List(Of ColumnDatas) 
       Public ReadOnly Property Columns() As List(Of ColumnDatas)
            Get
                Return  f_ColList 
            End Get
        End Property
    End Class
     
    Class ColumnDatas
            Private f_Name As String
            Private f_Width As Integer
            Private f_Visible As Boolean
     
            Public Property Name() As String
                Get
                    Return f_Name
                End Get
                Set(ByVal value As String)
                    If value <> f_Name Then
                            ' vérifie que ce nom n'est pas déjà ds la liste...
                            If f_ParentCombo.DDLColumns_ContainsName(value) Then
                                Throw New ArgumentOutOfRangeException("LabelName", value, "ce nom existe déjà")
                            End If
                        End If
                        f_Name = value
                    End If
                End Set
    ...
     
    end Class
    Comme tu peut le voir, les propriétés modifiables sont dans la classe ColumnData qui n'a pas accès à la collection...Il faudrait que je puis récuperer f_parentCombo...mais comment ou existe t'il 1 autre méthode ?

  4. #4
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 43
    Par défaut
    Bonjour.

    Citation Envoyé par bib34690 Voir le message
    Comme tu peut le voir, les propriétés modifiables sont dans la classe ColumnData qui n'a pas accès à la collection...Il faudrait que je puis récuperer f_parentCombo...mais comment ou existe t'il 1 autre méthode ?
    Je vois que tu a dejà trouver la solution, il te faut juste une petite instruction a ajouter.
    Dans la Class ColumnData il faut ajouter une propriété f_ParentCombo du type MaCombo(ce qui est apparemment déjà fait). La tu a l'accès a la liste des columns exstant dans f_ParentCombo. Une chose a savoir dans le code tu a écris. c'est que le test de DDLColumns_ContainsName(value) ne sera executé qu'au RunTime. Pour pouvoir l'exécute en DesignMode il faut ajouté le code qui reconnais le mode et fait le teste adéquat.

    Cela devrais marcher aprioris:

    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
     
     Public Property Name() As String
                Get
                    Return f_Name
                End Get
                Set(ByVal value As String)
                    If value <> f_Name Then
                            ' vérifie que ce nom n'est pas déjà ds la liste...
                            If Me.DesignMode = True Then
                                 If f_ParentCombo.DDLColumns_ContainsName(value) Then
                                        Throw New ArgumentOutOfRangeException("LabelName", value, "ce nom existe déjà")
                                 End If
                            End If
                            If f_ParentCombo.DDLColumns_ContainsName(value) Then
                                Throw New ArgumentOutOfRangeException("LabelName", value, "ce nom existe déjà")
                            End If
                        f_Name = value
                    End If
                End Set
    End property
    Cela pourrais donner une autre exception si f_ParentCombo is nothing.

  5. #5
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    Ce parent n'est jamais alimenté...c'est bien ma question...
    C'est Visual Studio qui ajoute les colonnes quand on clic sur le bouton "Add" dans la collection des colonnes...

  6. #6
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 43
    Par défaut
    Citation Envoyé par bib34690 Voir le message
    Ce parent n'est jamais alimenté...c'est bien ma question...
    C'est Visual Studio qui ajoute les colonnes quand on clic sur le bouton "Add" dans la collection des colonnes...
    Alors le teste sur la collection ne doit être fait dans la classe ColumnData mais dans la Collection elle même. Comme cela il te serai toujour possible de tester sur les valeurs des columns avant de les ajouter dans la collection de MaCombo. Et c'est comme cela quand fait d'ailleurs.
    Tu dois crée une autre classe nommé ColumnDataCollection qui hérite de la class ArrayList ou hashtable ou n'importe qu'elle type de collection. Puis faire un overloads de la methode Add() pour ajouter le Check sur le nom de la column avant de l'ajouter dans la liste.
    A la fin, le type de la ColumnCollection dans la class MaCombo doit etre du type ColumnDataCollection.

    Cela devrais marché aprioris. Je te conseil de lire des tutos sur les collections et leurs fonctionnement pour mieux comprendre comment cela marche.

  7. #7
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    Comme je l'ai dit ds mon 1er post, lors d'un clic sur le btn "Ajouter" la commande Add n'est pas declenchée.
    Il n'ajoute les elements à la collection que lorsque l'on fait Ok pour enregistrer toute la collection...

  8. #8
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 43
    Par défaut
    Citation Envoyé par bib34690 Voir le message
    Comme je l'ai dit ds mon 1er post, lors d'un clic sur le btn "Ajouter" la commande Add n'est pas declenchée.
    Il n'ajoute les elements à la collection que lorsque l'on fait Ok pour enregistrer toute la collection...
    Mais c'est normale. l'ajout que fait le bouton Add n'est qu'un ajout virtuelle ou temporaire en attendant la validation par le bouton OK.
    Je ne vois pas ou tu veux en venir.
    Le VS n'ajout pas un Item par la methode AddItem(item) mais par la methode AddRange(new Array of items).

    Ne block pas sur ce problème. tu doit le géré plutôt au RunTime qu'au designe mode.

  9. #9
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    Comment tester que l'on ne crée pas 2 fois 1 colonne du meme nom en mode design ?

  10. #10
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 43
    Par défaut
    Citation Envoyé par bib34690 Voir le message
    Comment tester que l'on ne crée pas 2 fois 1 colonne du meme nom en mode design ?
    Tu peux rendre le nom de ta column un Key dans la collection des columns comme cela VS ne permetera pas l'ajout de la même clés deux fois dans la collection.

Discussions similaires

  1. Probleme sur controle>"tester l'animation"
    Par jornr dans le forum Flash
    Réponses: 1
    Dernier message: 19/10/2006, 16h04
  2. [VBA]Gérer la collection Controls
    Par ip203 dans le forum Access
    Réponses: 5
    Dernier message: 26/04/2006, 12h51
  3. [Collections]Tableaux d'objets uniques.
    Par Invité dans le forum Collection et Stream
    Réponses: 30
    Dernier message: 22/03/2006, 13h20
  4. [C#][2.0]Collections controls d'une form et niveau
    Par chnew dans le forum Windows Forms
    Réponses: 1
    Dernier message: 13/02/2006, 13h51
  5. [VB6] la collection controls
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 30/04/2003, 17h03

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