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 :

[WPF] listbox et click sur item


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 362
    Par défaut [WPF] listbox et click sur item
    bonjour a tous,

    j'ai cherché en vain une propriété "clickitem" sur les listbox en wpf.

    en effet je veux créer un évènement lors du click sur un des items de la listbox, pour récupérer des données dans un datatable mais je n'ai pas réussi.

    j'ai donc utilisé la propriété "SelectionChanged", ce qui marche si on click a chaque fois sur un item différents mais par contre si je click deux fois d'affilé sur un même item et bien ça ne déclenche pas l'évènement (normal vu que la propiété "selectionChanged" n'est pas modifiée)

    Donc ma question est comment declencher un événement lors d'un click sur un item de la listbox pour s'affranchir de ce soucis?

    apprarement on peut faire quelque chose avec un EventSetter sur tous les ListBoxItem pour permettre un MouseLeftButtonDown sur les items, mais je n'ai rien compris.

    je suis debutant en wpf et je vois pas comment mettre cela en oeuvre...

    voici ma listbox:

    xaml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <ListBox
                Name="ListParam"
                HorizontalAlignment="Left" 
                Margin="35,96,0,140" 
                Width="266" 
                SelectionChanged="ListParam_SelectionChanged" 
     
                />
    remplissage de la listbox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void frmParam_load()
            {
                DB.DBDataSetTableAdapters.ParamDBTableAdapter ParamDBTableadapter = new ParamDBTableAdapter();
                ParamDB = ParamDBTableadapter.GetData();
                ListParam.ItemsSource = ParamDB;
                ListParam.DisplayMemberPath = "Nom_ParamDB";
    l'evenement ListParam_SelectionChanged
    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
     
    index = ListParam.SelectedIndex;
                if (index != -1)
                {
                    TxtboxParam.Text = ParamDB.Rows[index]["Nom_ParamDB"].ToString();
                    TxtboxAppliHit.Text = ParamDB.Rows[index]["AppliHit_ParamDB"].ToString();
                    TxtboxAppliAu.Text = ParamDB.Rows[index]["AppliAU_ParamDB"].ToString();
                    CbboxVR1.SelectedValue = ParamDB.Rows[index]["VR1_ParamDB"].ToString();
                    CbboxVR2.SelectedValue = ParamDB.Rows[index]["VR2_ParamDB"].ToString();
                }
                else
                {
                    TxtboxParam.Text = "";
                    TxtboxAppliHit.Text ="";
                    TxtboxAppliAu.Text = "";
                    CbboxVR1.SelectedValue = "";
                    CbboxVR2.SelectedValue = "";
                }
    merci et joyeux noel a tous

  2. #2
    Membre émérite Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Par défaut
    tu peux tres bien pour cela mettre l'evenement click sur le control de chaque item lui meme.

    dans ton datatemplate:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Button MouseDoubleClick=".." />

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 362
    Par défaut
    salut,

    ben en fait j'ai trouvé ce tread: http://www.developpez.net/forums/d73...-item-listbox/

    j'ai donc essayé de la mettre a ma sauce, a savoir:

    xaml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     <ListBox
                Name="ListParam"
                HorizontalAlignment="Left" 
                Margin="35,96,0,140" 
                Width="266" 
                >
                <Style TargetType="{x:Type ListBoxItem}">
                    <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListBoxItem_PreviewMouseLeftButtonDown" />
                </Style>
            </ListBox>
    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
     
    private void ListBoxItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                index = ListParam.SelectedIndex;
                if (index != -1)
                {
                    TxtboxParam.Text = ParamDB.Rows[index]["Nom_ParamDB"].ToString();
                    TxtboxAppliHit.Text = ParamDB.Rows[index]["AppliHit_ParamDB"].ToString();
                    TxtboxAppliAu.Text = ParamDB.Rows[index]["AppliAU_ParamDB"].ToString();
                    CbboxVR1.SelectedValue = ParamDB.Rows[index]["VR1_ParamDB"].ToString();
                    CbboxVR2.SelectedValue = ParamDB.Rows[index]["VR2_ParamDB"].ToString();
                }
                else
                {
                    TxtboxParam.Text = "";
                    TxtboxAppliHit.Text ="";
                    TxtboxAppliAu.Text = "";
                    CbboxVR1.SelectedValue = "";
                    CbboxVR2.SelectedValue = "";
                }
            }
    ca compile sans soucis mais des que je clique pour afficher la form contenant cette listbox j'ai l'erreur suivante:

    Impossible de créer une instance de 'frmParam' définie dans l'assembly 'AuCBmaker, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Une exception a été levée par la cible d'un appel. Erreur dans le fichier de balisage 'frmParam.xaml' ligne 2 position 5.
    pas compris d'ou venait de probleme

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Salut,

    Au moment où ce message arrive, essaies de regarder le détail de l'exception (il faut développer les InnerException). T'auras normalement un message plus explicite.

  5. #5
    Membre émérite Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Par défaut
    Je reeitere ma solution, quand on utilise wpf il faut penser wpf et plus window form.
    Wpf te donne la possibileter te creer un itemtemplate dedans tu met un boutton avec ton evenement click.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 362
    Par défaut
    bonjour,

    bon mon erreur viens de l'ajout de ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <Style TargetType="{x:Type ListBoxItem}">
                    <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListBoxItem_PreviewMouseLeftButtonDown" />
                </Style>
    et le message d'erreur dans InnerException est
    "La collection Items doit être vide pour pouvoir utiliser ItemsSource."
    pour zeavan, je comprends ce que tu veux dire mais je n'arrive pas a le mettre en place... tu aurais un exemple pour mon cas?

    merci

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Est-ce que tu manipules la collection d'Items directement depuis ton code ? Car tu ne peux pas le faire si tu passes déjà par du binding sur l'ItemsSource.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 362
    Par défaut
    salut,

    ben en fait tout est dans mon premier post:

    je charge la listbox par le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void frmParam_load()
            {
                DB.DBDataSetTableAdapters.ParamDBTableAdapter ParamDBTableadapter = new ParamDBTableAdapter();
                ParamDB = ParamDBTableadapter.GetData();
                ListParam.ItemsSource = ParamDB;
                ListParam.DisplayMemberPath = "Nom_ParamDB";
    apres ma listbox en waml se resume a cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     <ListBox
                Name="ListParam"
                HorizontalAlignment="Left" 
                Margin="35,96,0,140" 
                Width="266" 
                 />

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Et si tu exécutes ce code, tu as l'erreur indiquée ? Tu ne fais rien d'autre ?

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 362
    Par défaut
    re,

    ben si je laisse telquel, pas de soucis ca compile et pas d'erreur

    par contre, si je rajoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <Style TargetType="{x:Type ListBoxItem}">
                    <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListBoxItem_PreviewMouseLeftButtonDown" />
                </Style>
    au code xaml de ma listbox et bien j'ai l'erreur au lancement de la form contenant la listbox....

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Donc montre nous le code de la méthode ListBoxItem_PreviewMouseLeftButtonDown

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 362
    Par défaut
    le voici:

    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 void ListBoxItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                index = ListParam.SelectedIndex;
                if (index != -1)
                {
                    TxtboxParam.Text = ParamDB.Rows[index]["Nom_ParamDB"].ToString();
                    TxtboxAppliHit.Text = ParamDB.Rows[index]["AppliHit_ParamDB"].ToString();
                    TxtboxAppliAu.Text = ParamDB.Rows[index]["AppliAU_ParamDB"].ToString();
                    CbboxVR1.SelectedValue = ParamDB.Rows[index]["VR1_ParamDB"].ToString();
                    CbboxVR2.SelectedValue = ParamDB.Rows[index]["VR2_ParamDB"].ToString();
                }
                else
                {
                    TxtboxParam.Text = "";
                    TxtboxAppliHit.Text ="";
                    TxtboxAppliAu.Text = "";
                    CbboxVR1.SelectedValue = "";
                    CbboxVR2.SelectedValue = "";
                }
            }
    en fait j'ai recupéré le code du "ListParam_SelectionChanged" qui lui fonctionne... sauf si on clique sur le même elements de la listbox "ListParam"

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Heu là, je dois avouer que je ne comprend plus trop comment tu peux avoir ce message d'erreur....

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 362
    Par défaut
    salut,

    je n'ai jamais de bol sur ce genre de truc.... dès qui y a un bug a la con, je me le prends.

    sinon pour la proposition de zeavan, comment je fais pour convertir mon exemple avec sa méthode?

    si j'ai bien compris, il faut transformer les items de ma listbox en boutons et après on peut gérer les clicks sur ces boutons? c'est bien ca?

    Par contre la mise en œuvre....

    a l'avance merci

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Tu définis l'ItemTemplate de ta ListBox et tu dis que c'est un bouton.

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 362
    Par défaut
    re,

    bon j'ai reussi le binding et l'utilisation de bouton comme item pour ma listbox.

    mon code C#

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void frmParam_load()
            {
                DB.DBDataSetTableAdapters.ParamDBTableAdapter ParamDBTableadapter = new ParamDBTableAdapter();
                ParamDB = ParamDBTableadapter.GetData();
               this.DataContext = ParamDB;
    }
    le xaml:
    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
     
     <ListBox
                Name="ListParam"
                HorizontalAlignment="Left" 
                Margin="35,87,0,149" 
                Width="266" 
                ItemsSource="{Binding}"
                IsSynchronizedWithCurrentItem="True"
                >
                <ListBox.ItemTemplate>
                    <DataTemplate >
                        <Button Content="{Binding Nom_ParamDB}" 
                                       Width="75"
                                       Height="30"
     
                                       />
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
    donc j'ai bien autant de boutons dans ma listbox que d'elements dans le champ "Nom_ParamDB".
    Par contre comment lier le bouton cliqué et l'index de la listbox? par exemple si je clique sur le 3eme bouton, faire que l'index soit à 2?

    de plus j'aimerai changer le style des boutons pour qu'ils soient identiques au styles des items par defauts des listbox, c'est possible?

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par waspy59 Voir le message
    Par contre comment lier le bouton cliqué et l'index de la listbox? par exemple si je clique sur le 3eme bouton, faire que l'index soit à 2?
    Sur l'évènement Click du bouton, essayes de récupérer la propriété SelectedIndex de ta listbox.

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 362
    Par défaut
    salut,

    oui j'y ai pensé mais le soucis, c'est que le clcik sur un des boutons est completement independant de l'item de la listbox.

    par exemple si je click sur le 3em bouton, le ne vais pas selectionner le 3em element de la listbox. il faut cliquer a coté du bouton pour que l'index soit le bon

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Lors du clic, utilise la méthode ItemContainerGenerator.ContainerFromItem sur ta ListBox pour récupérer le ListBoxItem associé.

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 362
    Par défaut
    oki merci

Discussions similaires

  1. double click sur item listView
    Par chlock62 dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 28/03/2014, 22h29
  2. Evènement click sur item menu non déclenché
    Par clem_alain dans le forum ASP.NET
    Réponses: 0
    Dernier message: 06/04/2013, 14h58
  3. ListBox avec CheckBox: click sur un item
    Par yonpo dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 26/11/2010, 11h39
  4. Click sur un Item d'une ListBox
    Par Morgoth818 dans le forum Windows Presentation Foundation
    Réponses: 14
    Dernier message: 07/05/2009, 12h35
  5. recharger listbox apres click sur bouton
    Par tehes dans le forum ASP.NET
    Réponses: 4
    Dernier message: 22/01/2008, 15h27

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