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 :

Supprimer une instance de classe à partir d'un élément de l'instance


Sujet :

Windows Presentation Foundation

  1. #1
    Membre régulier
    Inscrit en
    Août 2009
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 143
    Points : 74
    Points
    74
    Par défaut Supprimer une instance de classe à partir d'un élément de l'instance
    Bonjour la communauté

    Voici mon problème de ce matin: j'ai fait une appli telle que l'utilisateur puisse dynamiquement créer des lignes (shape.line). Donc à la création d'une ligne, j'instancie un élément d'une classe qui contient entre autres la ligne créée, puis l'instance de la classe est rangée dans une collection.
    Ensuite la ligne en question est ajoutée à la collection d'enfants d'une grid, donc elle s'affiche sur le grid (grid.children.add(ligne)).
    Puis l'utilisateur peut utiliser le menu contextuel pour supprimer la ligne du Grid, mais ça ne me suffit pas. Je voudrais aller plus loin et supprimer carrément l'instance de la classe dans laquelle cette ligne est contenue. Et c'est en celà que j'aurais besoin de votre précieuse intervention.

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    J'ai pas compris....

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 97
    Points : 106
    Points
    106
    Par défaut
    Salut Sandy,
    Peut-être devrais-tu nous poster le code pour que l'on puisse comprendre.

  4. #4
    Membre régulier
    Inscrit en
    Août 2009
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 143
    Points : 74
    Points
    74
    Par défaut
    Le code, est assez long, donc je vais réexpliquer.
    J'ai une classe DrawLine;chaque instance de la classe drawline contient une shape.line appelée ligne que j'affiche visuellement en l'ajoutant à la collection d'enfants d'une grid. Je crois que jusqu'ici c'est clair.

    Ensuite je voudrais que l'utilisateur puisse supprimer ligne s'il en a envie. Pour celà je lui associe un menu contextuel "supprimer" qui la supprime de l'interface graphique uniquement:

    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
     
    Public Sub subSupprObstacle(ByVal sender As Object, ByVal e As RoutedEventArgs)
            Dim dObj As DependencyObject = VisualTreeHelper.GetParent(TryCast(sender, MenuItem))
            While dObj.[GetType]() <> GetType(ContextMenu) AndAlso dObj IsNot Nothing
                dObj = VisualTreeHelper.GetParent(dObj)
            End While
     
            If dObj IsNot Nothing Then
                Dim cm As ContextMenu = TryCast(dObj, ContextMenu)
                If cm.PlacementTarget IsNot Nothing Then
                    Dim b As UIElement = TryCast(cm.PlacementTarget, UIElement)
                    DirectCast(Application.Current.MainWindow, MyMainWindow).GrdDessin.Children.Remove(b)
                End If
            End If
        End Sub
    Mais comme je le disais, cette sub supprime la ligne uniquement de l'interface graphique. Ce que je voudrais c'est pouvoir la supprimer de l'instance de drawline dans laquelle elle se trouve (appelons cette instance maLigne). Sachant que maLigne est à son tour stockée dans une collection, collectionLignes de type "List(of drawline)".

    Comment ferais-je à partir de la représentation de ligne sur le grid, pour remonter à l'élément de la collectionLignes qui contient maLIgne et le supprimer de la collection?

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 97
    Points : 106
    Points
    106
    Par défaut
    Salut,

    Une solution serait de stocker ton objet de type DrawLine dans la propriété Tag de ton objet Line.

    Exemple :

    Ma classe DrawLine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class DrawLine
        {
            public Line MyLigne { get; set; }
     
            public DrawLine()
            {
                MyLigne = new Line();
                MyLigne.Tag = this;
            }
        }
    Le xaml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <Grid>
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition Height="30" />
            </Grid.RowDefinitions>
     
            <Grid x:Name="maGrid" />
     
            <Button x:Name="Delete" Content="Delete" Click="Delete_Click" Grid.Row="1" />
        </Grid>
    Le code behind :
    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
    private List<DrawLine> allLines;
     
            public Window1()
            {
                InitializeComponent();
     
                allLines = new List<DrawLine>();
     
                DrawLine l1 = new DrawLine();
                allLines.Add(l1);
                maGrid.Children.Add(l1.MyLigne);
     
                DrawLine l2 = new DrawLine();
                allLines.Add(l2);
                maGrid.Children.Add(l2.MyLigne);
            }
     
            private void Delete_Click(object sender, RoutedEventArgs e)
            {
                Line lineToDelete = allLines[0].MyLigne;
                maGrid.Children.Remove(lineToDelete);
                allLines.Remove((DrawLine)lineToDelete.Tag);
            }
    Quand on clique sur le bouton cela supprime l1, à la fois sur la grid et dans la liste des DrawLine.

    Après c'est juste un exemple simple, à adapter à ta propre fonction.

  6. #6
    Membre régulier
    Inscrit en
    Août 2009
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 143
    Points : 74
    Points
    74
    Par défaut
    Merci, Cecile5. La propriété Tag, je la connaissais pas, elle est cool!!!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/06/2014, 11h04
  2. Supprimer une ligne via macro à partir d'une colonne donnée
    Par muzele dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/06/2012, 10h47
  3. Réponses: 1
    Dernier message: 12/05/2010, 19h52
  4. Réponses: 10
    Dernier message: 21/08/2009, 10h44
  5. Nom d'instance de classe à partir d'une string
    Par nofasc95 dans le forum C#
    Réponses: 2
    Dernier message: 06/02/2009, 12h47

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