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 :

Executer une sub a l'intérieur d'une classe ajoutée a une ListBox


Sujet :

Windows Presentation Foundation

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Executer une sub a l'intérieur d'une classe ajoutée a une ListBox
    Bonjour,

    Après trois heure de recherches veines (via google et par tâtonnement) j'en fait appel votre aide.
    Je développe en VB.net à l'aide de Visual Studio 2010.
    J'ai une ListBox dans laquelle je met des classes directement.
    J'utilise un DataTemplate pour tout placer correctement :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <DataTemplate>
     <StackPanel MinWidth="710">
      <Image Source="folder.png" HorizontalAlignment="Left" VerticalAlignment="Top" />
      <TextBlock Text="{Binding Path=FolderLocalName}" VerticalAlignment="Top" FontSize="20" FontFamily="Segoe UI"  HorizontalAlignment="Left" Margin="37,-30,0,0"/>
      <TextBlock Text="{Binding Path=FolderSizeOnHardDisk}" VerticalAlignment="Top"  HorizontalAlignment="Right" Margin="0,-35,0,0"/>
      <TextBlock Text="{Binding Path=FolderLocalPath}"/>
      <CheckBox x:Name="isconsyncchk" Content="Sauvegarde automatique" HorizontalAlignment="Right" Margin="0,-37,0,0" Checked="" Unchecked=""/>
     </StackPanel> 
    </DataTemplate>
    Je place aussi une checkbox;
    Je souhaiterai que les évements Checked et Unchecked déclanche des sub qui sont présentent dans la classe.
    Comment m'y prendre ?

    En vous remerciant de votre aide et en vous souhaitant une agréable journée.

    Bahaika.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Bahaïka Voir le message
    Je souhaiterai que les évements Checked et Unchecked déclanche des sub qui sont présentent dans la classe.
    Comment m'y prendre ?
    Tu mets le nom de tes fonctions (si ça correspondant à ce que tu appelles Sub) dans le Checked et Unchecked que t'as laissé vide.

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Bonjour et merci de votre réponse.

    Les fonctions que je tente d’exécuter sont dans une classe qui se trouve dans un fichier différent.
    En gros, j'ajoute des objets de cette classe dans une listbox, et j'aimerai accéder a une fonction de cette objet via un contrôle ajouté dynamiquement dans la ListBox.

    Auriez-vous une idée ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Bahaïka Voir le message
    Les fonctions que je tente d’exécuter sont dans une classe qui se trouve dans un fichier différent.
    J'espère que le fichier dont tu parles est bien le fichier devrant contenir le code-behind de ton fichier xaml. Si non t'aurais forcément une erreur d'xécution.

    Citation Envoyé par Bahaïka Voir le message
    En gros, j'ajoute des objets de cette classe dans une listbox, et j'aimerai accéder a une fonction de cette objet via un contrôle ajouté dynamiquement dans la ListBox.
    Un peu flou comme explication. Qu'elle est l'action que tu voudras utiliser pour faire appel à la méthode de ton objet ? utilises les commandes si t'utilises le pattern MVVM.

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    J'espère que le fichier dont tu parles est bien le fichier devrant contenir le code-behind de ton fichier xaml. Si non t'aurais forcément une erreur d’exécution.
    J'ai effectivement une erreur d'exécution; excuse-moi il s'agit de mon premier programme en WPF, je patoge un peu; même en ayant lu les documentations.
    La classe attribuée à ma fenêtre est différente que la classe des objets que j'ajoute à la ListBox.
    C'est peut-être là que se trouve le soucis, puis-je définir à un DataTemplate une classe bien particulière ?

    Un peu flou comme explication. Qu'elle est l'action que tu voudras utiliser pour faire appel à la méthode de ton objet ? utilises les commandes si t'utilises le pattern MVVM.
    J'ignore ce qu'est un Pattern en WPF, je vais regarder ça dans la documentation MSDN de suite; sinon, je désire que l'action Checked de la CheckBox ajoutée au ListBoxItem(Généré a partir de l'objet en question) déclanche une fonction intégré au-dit l'objet.
    J'espère avoir été plus clair.
    Voici l'article de la documentation MSDN que j'ai utilisé pour comprendre le principe pour peupler une ListBox avec des objets :
    http://msdn.microsoft.com/en-us/library/ms742521.aspx

    Voici mon code :
    Le code de la ListBox :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <ListBox x:Name="FldrListBox" Height="390.5" Canvas.Top="35" Width="718" IsSynchronizedWithCurrentItem="True" Visibility="Hidden">               
    <ListBox.ItemTemplate>
    <DataTemplate>
     <StackPanel MinWidth="710">
      <Image Source="folder.png" HorizontalAlignment="Left" VerticalAlignment="Top" />
      <TextBlock Text="{Binding Path=FolderLocalName}" VerticalAlignment="Top" FontSize="20" FontFamily="Segoe UI"  HorizontalAlignment="Left" Margin="37,-30,0,0"/>
      <TextBlock Text="{Binding Path=FolderSizeOnHardDisk}" VerticalAlignment="Top"  HorizontalAlignment="Right" Margin="0,-35,0,0"/>
      <TextBlock Text="{Binding Path=FolderLocalPath}"/>
      <CheckBox x:Name="isconsyncchk" Content="Sauvegarde automatique" HorizontalAlignment="Right" Margin="0,-37,0,0" Checked="" Unchecked=""/>
     </StackPanel> 
    </DataTemplate>
    </ListBox.ItemTemplate>
    </ListBox>

    Ensuite, via le code qui me permet d'ajouter les objets de la classe FldrClass a ma listbox:
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each Item As String In ListArray
             Dim fldr As New FolderClass(Item)
             FldrListBox.Items.Add(fldr)
    Next

    Enfin, voici ma classe stockée dans un fichier différent que MainWindow :
    Code vb.net : 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
     
    Public Class FolderClass
        Public Property FolderLocalPath As String = Nothing
        Public Property FolderLocalName As String = Nothing
        Public Property FolderSizeOnHardDisk As String = Nothing
        Public Property OrginalFolderSizeOnHardDisk As Long = Nothing
        Public Property IsContinueousSynced As Boolean = False
        Public Property ChkSC As Boolean = False
     
        Public Sub New(ByRef WantedPath as string)
            'BlahBlah (Code de construction de mon objet)
        End Sub
     
        Public Sub ActivateSC()
                'A exécuter quand la checkbox est cochée
        End Sub
     
    End Class


    Je suis désolé si je m’exprime mal; en tous cas merci pour la patience et le coup de main.

    En souhaitant une agréable journée

  6. #6
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut executer une simple action suite à un checkbox sur listbox
    bonjour bahaika
    comme souligne par h2s84,et dans le cas le plus simple de liaison d'une classe externe à un listbox il faudrait d'abord:
    - que ta classe FolderClass(classe ordinaire) implemente INotifyPropertyChanged pour notifier ses changements de valeur de prop au ListBox(actuellement seul ListBox peut notifier un chagement vers FolderClass)
    Ensuite le listbox est particulierement versatile concernant l'etat actuel de son index(index=-1 si aucun item selectionne sous curseur).
    Apres ces 2 precautions c'est tres simple .Dans le gestionnaire d'evenement de Checked il suffit de recuperer une instance de FldrListBox.SelectedItem ,de la caster vers FolderClass et d'appeler ta sub
    ActivateSC().
    Bref j'ai repris un exemple simplifie de ta classe FolderClass ou :
    -on change une prop Prenom suite à isconsyncchk_Checked et
    -on la retablit cette prop Prenom suite à syncchk_Unchecked
    code xaml winform
    Code xaml : 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
     
    Window x:Class="Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
        <Canvas 
            Background="LightGray" 
            HorizontalAlignment="Stretch"
            VerticalAlignment="Stretch">
            <ListBox x:Name="FldrListBox" 
                     Canvas.Top="35" 
                     IsSynchronizedWithCurrentItem="True" 
                     Visibility="Visible"
                     HorizontalAlignment="Stretch"
                     VerticalAlignment="Stretch">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                            <StackPanel MinWidth="710">
                                <Image Source="Resources\Nenuphars.jpg" 
                                       HorizontalAlignment="Left" 
                                       VerticalAlignment="Top"
                                       Width="100"
                                       Height="100"/>
                                <TextBlock 
                                    Text="{Binding 
                                    Path=Nom}" 
                                    VerticalAlignment="Top" 
                                    FontSize="20" 
                                    FontFamily="Segoe UI"  
                                    HorizontalAlignment="Left" 
                                    Margin="37,-30,0,0"/>
                                <TextBlock 
                                    Text="{Binding Path=Prenom}" 
                                    VerticalAlignment="Top"  
                                    HorizontalAlignment="Right" 
                                    Margin="0,-35,0,0"/>
                                <TextBlock 
                                    Text="{Binding Path=isClient}"/>
                                <CheckBox 
                                    x:Name="isconsyncchk"
                                    Content="Sauvegarde automatique" 
                                    HorizontalAlignment="Right" 
                                    Margin="0,-37,0,0"  
                                    Checked="isconsyncchk_Checked" 
                                    Unchecked="isconsyncchk_Unchecked"/>
                             </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </Canvas>
    </Window>
    code behind du winform
    Code vb.net : 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
     
    Class Window1 
        Private listarray As ArrayList = New ArrayList
        Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
            For i As Integer = 0 To 9
                listarray.Add("oui")
            Next
     
            For Each Item As String In listarray
                Dim fldr As New FolderClass(Item)
                FldrListBox.Items.Add(fldr)
            Next
        End Sub
     
        Private Sub isconsyncchk_Checked(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
            If Me.FldrListBox.SelectedIndex <> -1 Then
                Dim fldr As FolderClass = CType(Me.FldrListBox.SelectedItem, FolderClass)
                fldr.ActivateSC()
            End If
     
        End Sub
     
        Private Sub isconsyncchk_Unchecked(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
            If Me.FldrListBox.SelectedIndex <> -1 Then
                Dim fldr As FolderClass = CType(Me.FldrListBox.SelectedItem, FolderClass)
                fldr.ActivateSC_Bis()
            End If
     
        End Sub
    End Class
    code behind de la classe FolderClass dans le meme projet
    Code vb.net : 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    Imports System.ComponentModel
     
    Public Class FolderClass
        'Implement INotifyPropertyChanged pour binding FolderClass vers =>ListBox
        Implements INotifyPropertyChanged
        '
        'simple counter d'item
        Private Shared counterItem As Integer = 0
        'memoriser  valeur de prop Prenom de l'item selectionne
        'en vue de la retablir lors de l'event Unchecked
        Private oldPrenom As String = String.Empty
        'les prop de la classe
        Private m_nom As String
        Public Property Nom() As String
            Get
                Return m_nom
            End Get
            Set(ByVal value As String)
                m_nom = value
                'Raise event for each property
                Call OnPropertyChanged("Nom")
            End Set
        End Property
        Private m_prenom As String
        Public Property Prenom() As String
            Get
                Return m_prenom
            End Get
            Set(ByVal value As String)
                m_prenom = value
                Call OnPropertyChanged("Prenom")
            End Set
        End Property
        Private m_isclient As String
        Public Property IsClient() As Boolean
            Get
                Return m_isclient
            End Get
            Set(ByVal value As Boolean)
                m_isclient = value
                Call OnPropertyChanged("IsClient")
            End Set
        End Property
     
        Public Sub New(ByRef WantedPath As String)
            'BlahBlah (Code de construction de mon objet)
     
            If WantedPath = "oui" Then
                counterItem = counterItem + 1
                m_nom = "Nom" & counterItem.ToString
                m_prenom = "Prenom" & counterItem.ToString
                m_isclient = "True"
            End If
     
        End Sub
     
        Public Sub ActivateSC()
            'A exécuter quand la checkbox est cochée
            MessageBox.Show(Me.Nom & " " & Me.Prenom & " is " & IsClient)
            'memorise valeur actuelle
            Me.oldPrenom = Me.Prenom
     
            'SIMPLE ACTION: on change la valeur de l'item selectionne
            Me.Prenom = " Checked Prenom"
     
     
        End Sub
        'cette sub annule le travail de ActivateSC
        'illustre l'event  unchecked
        Public Sub ActivateSC_Bis()
            'A exécuter quand la checkbox est decochée
            'simple action: on affiche la  -valeur modifie- de l'item selectionne apres checked 
            MessageBox.Show(Me.Nom & " " & Me.Prenom & " is " & IsClient)
     
            'si valeur  de l' item selectionne modifie la retablir dans sa valeur initiale
            If Me.Prenom <> Me.oldPrenom Then
                Me.Prenom = Me.oldPrenom
            End If
            MessageBox.Show(Me.Nom & " " & " old value is : " & Me.Prenom)
        End Sub
        Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
        'Ajouter implementation Event OnPropertyChanged
        Private Sub OnPropertyChanged(ByVal propName As String)
            If propName IsNot Nothing Then
                RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
            End If
        End Sub
     
    End Class

    bon code...................

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup de la réponse;

    En vous souhaitant a tout deux une bonne journée.

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

Discussions similaires

  1. [AC-2003] erreur d'execution 2185 lors de l'execution d'une sub vba
    Par jubourbon dans le forum VBA Access
    Réponses: 15
    Dernier message: 02/10/2013, 19h35
  2. Réponses: 3
    Dernier message: 14/07/2011, 16h10
  3. sed et ajout d'une ligne au début d'un fichier en fonction d'une condition
    Par sheepolata dans le forum Administration système
    Réponses: 2
    Dernier message: 14/10/2010, 11h23
  4. Ajout d'une feuille afin d'obtenir l'ensemble des résultats d'une macro.
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/01/2009, 15h00
  5. [VB.NET] Appeler une sub public dans un module de form
    Par SergeF dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/06/2004, 13h08

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