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

Windows Presentation Foundation Discussion :

Objet Visual déjà enfant d'un autre Objet Visual.


Sujet :

Windows Presentation Foundation

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 81
    Points : 136
    Points
    136
    Par défaut Objet Visual déjà enfant d'un autre Objet Visual.
    Bonjour,

    j'ai un petit soucis sur un contrôle que je développe. Le principe de fonctionnement en est très simple, mais je me heurte à cette exception:

    "L'objet Visual spécifié est déjà un enfant d'un autre objet Visual ou la racine d'une classe CompositionTarget."
    Petite explication du contexte:

    Je développe une sorte de barre des tâches. Elle est constituée principalement d'un StackPanel contenant des ComboBox, et d'une ComboBox contenant également des ComboBox.

    En gros, lorsque l'utilisateur ouvre des fenêtres de mon application, je répertorie ces fenêtres en groupe (en fait, une ComboBox) que je viens ajouter au fur et à mesure au StackPanel.
    Si le nombre de groupe dépasse la contenance du StackPanel, je viens ajouter les groupes suivants à la ComboBox située à coté du StackPanel.

    Chaque ComboBox est également ajouté à une liste.

    Cette partie du traitement ne pose aucun soucis (Oui, des Items.Add() C'est pas trop compliqué à faire :p).

    Lorsqu'il y a trop de groupes d'ouverts, je veux donner la possibilité à l'utilisateur de faire passer un groupe de la ComboBox au StackPanel. Pour cela, je récupère l'objet sélectionné, mets à jour sa position dans ma liste contenant toutes les ComboBox, puis réaffecte les positions de chaque ComboBox.

    Voici la méthode qui le fait :

    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
        Private Sub MettreAJourAffichage()
            Dim combo As ComboBox
    
            'Vide le panel et la ComboAutres de tous leurs items.
            panel.Children.Clear()
            comboBoxAutres.Items.Clear()
    
            'Réaffecte la position des combobox.
            For index = 0 To _listeCombo.Count - 1
                combo = _listeCombo.Item(index)
                If index <= _placeDispo - 1 Then
                    combo.IsEnabled = True
                    panel.Children.Add(combo)
                Else
                    combo.IsEnabled = False
                    comboBoxAutres.Items.Add(combo)
                End If
    
            Next
        End Sub
    C'est là que l'exception est levée : Il me dit que ma comboBox appartient déjà à un objet visual.

    Pourtant, avant de réaffecter les positions, je fais :
    panel.children.clear()
    combobox.items.clear()

    Les conteneurs sont donc normalement vides.

    Par ailleurs, pour mes test, j'ai reproduit ce comportement avec un bouton. Je n'ai pas de combo sélectionnée du coup, mais je peux bien réaffecter les positions comme je le souhaites, en effectuant le même code (La même méthode est appelée dans les deux cas.)


    Bon, plus que des paroles, un exemple est encore plus explicite.
    Je vous mets donc en pièce jointe une solution reproduisant mon problème.

    Si quelqu'un a une idée ... je suis preneur !

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 81
    Points : 136
    Points
    136
    Par défaut
    Problème résolu.

    Pour cela, je n'ajoute pas directement les ComboBox à la comboBox "Autres", je les encapsules dans un objet.

    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
        Private Class CapsuleComboBox
     
            Private _combobox As ComboBox
     
            Public Sub New(ByVal combo As ComboBox)
                _combobox = combo
            End Sub
     
            Public ReadOnly Property ComboBox() As ComboBox
                Get
                    Return _combobox
                End Get
            End Property
     
            Public Overrides Function ToString() As String
                Return _combobox.Text
            End Function
     
        End Class
    Voilou.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/07/2014, 13h27
  2. un objets dont l'attribut est un autre objet
    Par wafiwafi dans le forum Langages de programmation
    Réponses: 8
    Dernier message: 04/09/2009, 23h27
  3. Réponses: 3
    Dernier message: 05/05/2004, 00h39
  4. Création d'un objet d'un form a l'autre
    Par Argonz dans le forum C++Builder
    Réponses: 12
    Dernier message: 03/03/2004, 10h23
  5. Un objet rendu apparaît derrière un autre objet
    Par jamal24 dans le forum OpenGL
    Réponses: 2
    Dernier message: 01/05/2003, 20h47

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