Probleme de DataGridViewComboBoxCell avec EditingControlShowing

Genildf Messages postés 272 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 30 décembre 2015 - 6 avril 2012 à 15:39
Genildf Messages postés 272 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 30 décembre 2015 - 10 avril 2012 à 10:26
Bonjour j'ai un souci avec EditingControlShowing voici mon code

 Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing

        
        cb = TryCast(e.Control, ComboBox)
        If cb IsNot Nothing Then
       or one handler twice
            RemoveHandler cb.SelectedIndexChanged, AddressOf DGVComboIndexChanged
  

            AddHandler cb.SelectedIndexChanged, AddressOf DGVComboIndexChanged

        End If
    End Sub

Mon probleme est lors du premier passage ici tout vas bien rien a dire..

Par contre mon osuci est lors du 2eme passage la fonction DGVComboIndexChanged se lance 2 fois

au 3 eme passage c'est encore pire 3 fois et ainsi de suite..

si vous ne comprenez pas mon probleme voici un lien de quelq'un qui a le meme probleme que moi :
ici


peut etre que cela vous parlera mieu :D

15 réponses

Genildf Messages postés 272 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 30 décembre 2015 1
6 avril 2012 à 15:40
Bonjour j'ai un souci avec EditingControlShowing voici mon code

 Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing

        
        cb = TryCast(e.Control, ComboBox)
        If cb IsNot Nothing Then
       or one handler twice
            RemoveHandler cb.SelectedIndexChanged, AddressOf DGVComboIndexChanged
  

            AddHandler cb.SelectedIndexChanged, AddressOf DGVComboIndexChanged

        End If
    End Sub

Mon probleme est lors du premier passage ici tout vas bien rien a dire..

Par contre mon osuci est lors du 2eme passage la fonction DGVComboIndexChanged se lance 2 fois

au 3 eme passage c'est encore pire 3 fois et ainsi de suite..

si vous ne comprenez pas mon probleme voici un lien de quelq'un qui a le meme probleme que moi :
[http://stackoverflow.com/questions/582625/editingcontrolshowing-events-firing-multiple-timesici]

peut etre que cela vous parlera mieu :D
0
Utilisateur anonyme
6 avril 2012 à 15:57
Bonjour,
Ta question reste vague, et ton code exposé incomplet.

Que cherches tu à faire exactement?
Qui c'est le Handler "DGVComboIndexChanged"?
Qu'est-ce que: "or one handler twice" ???
"cb = TryCast(e.Control, ComboBox)" où est la déclaration de "cb"?

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Genildf Messages postés 272 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 30 décembre 2015 1
6 avril 2012 à 17:38
Desole mon probleme est aur apres le passage sur cette fontion

le DGVComboIndexChanged est appelé (donc tout vas bien)

au 2eme passage il passe 2 fois
au 3eme 3fois et ainsi de suite
0
Genildf Messages postés 272 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 30 décembre 2015 1
6 avril 2012 à 17:38
pour cb il est declaré en public en
dim cb as combobox
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
6 avril 2012 à 17:40
Ok, donc une ligne en moins,

Que cherches tu à faire exactement?
Qui c'est le Handler "DGVComboIndexChanged"?
Qu'est-ce que: "or one handler twice" ???


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Genildf Messages postés 272 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 30 décembre 2015 1
6 avril 2012 à 17:40
je te reecit mon code correctement :
dim cb as combobox
    Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing

        cb = TryCast(e.Control, ComboBox)

        If cb IsNot Nothing Then

            RemoveHandler cb.SelectedIndexChanged, AddressOf DGVComboIndexChanged

            AddHandler cb.SelectedIndexChanged, AddressOf DGVComboIndexChanged

        End If
    End Sub


et voici le lien ou un gars a le meme probleme
[http://stackoverflow.com/questions/582625/editingcontrolshowing-events-firing-multiple-timesici]
0
Genildf Messages postés 272 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 30 décembre 2015 1
6 avril 2012 à 17:42
voici mon code de DGVComboIndexChanged
Private Sub DGVComboIndexChanged()
        ComboBox1.SelectedIndex = cb.SelectedIndex
        Dim relation As DataRelation

        relation = New DataRelation("relation", _
                                           DataSet1.Tables(System.IO.Path.GetFileName(ListBox1.SelectedItem)).Columns("Reference"), _
                                           DataSet1.Tables(ComboBox1.SelectedItem).Columns("Reference"))
        Me.DataSet1.Relations.Add(relation)



        search_child(cb.SelectedItem, ComboBox1.SelectedItem, System.IO.Path.GetFileName(ListBox1.SelectedItem))
    End Sub


pour le "or one handler twice" ??? c'est un commentaire qui a mal tourné :D
0
Utilisateur anonyme
6 avril 2012 à 17:49
Attends,
Ton dernier code est complètement différent du premier.
Nous avons maintenant un ListBox, un ComboBox, et un DataSet supplémentaire.
Pour le "or one handler twice" je comprends mieux.

Je retire donc toutes mes questions, sauf une:
Que cherches-tu à faire exactement?


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Genildf Messages postés 272 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 30 décembre 2015 1
6 avril 2012 à 17:52
le dernier code est la fonction appelée DGVComboIndexChanged()

l'autre est au dessu

Je cherche a recupere le resultat d'une combobox d'une cellule j'y suis parvenu j'ai juste le probleme :

Lorsque je clique de nouveau sur cette combobox

la fonction "DGVComboIndexChanged()" est appelée 2 fois
0
Genildf Messages postés 272 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 30 décembre 2015 1
6 avril 2012 à 17:53
en fait quand je clique une fois sur le combobox ca marche
2 fois c plus bon car cela appel 2 fois
0
Utilisateur anonyme
6 avril 2012 à 18:00
"Private Sub DGVComboIndexChanged"

C'est normal, à chaque fois que tu changes d'index de la comboBox (quand tu cliques sur une autre valeur de la combobox) il fait appel à la sub...


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Utilisateur anonyme
6 avril 2012 à 18:21
Essaye ça dans un nouvel projet (pour le test), tu vas mieux comprendre le fonctionnement:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Pour le test j'affiche le nombre de fois que l'index change dans la form
        'on commence donc à zéro:
        Me.Text = "0"
        'Je crée dynamiquement un combobox:
        Dim Combo As ComboBox = New ComboBox
        'Je l'ajoute aux contrôles de la form:
        Me.Controls.Add(Combo)
        'Je le remplis avec des données:
        Combo.Items.Add("AAA")
        Combo.Items.Add("BBB")
        Combo.Items.Add("CCC")
        Combo.Items.Add("DDD")
        'J'affiche l'index 0 => "AAA" donc
        Combo.SelectedIndex = 0
        'Je lui ajoute le handler Combo_SelectedIndexChanged
        AddHandler Combo.SelectedIndexChanged, AddressOf Combo_SelectedIndexChanged
    End Sub

    Private Sub Combo_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        'Je fais un "plus un" à chaque fois que je change d'index sur le combo
        Me.Text = Val(Me.Text) + 1
    End Sub



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Genildf Messages postés 272 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 30 décembre 2015 1
7 avril 2012 à 09:44
Jusque la tout va bien mais justement ce n'est pas une combobox normale

c'esst un DataGridViewComboBoxCell

du coup avec ton code j'obtien cette erreur :D

'SelectedIndexChanged' n'est pas un événement de 'System.Windows.Forms.DataGridViewComboBoxCell'

Le seul moyen de pouvoir ecuperer cet evenement est de passer par
DataGridView1_EditingControlShowin

et de caster la DataGridViewComboBoxCell en combobox

le probleme c'est que a chaque fois que j'y passe il ajoute les handler mais j'ai l'impression qu'il ne les enleve pas

du coup a la 2 eme selection de la DataGridViewComboBoxCell le sub DGVComboIndexChanged() est appelé 2 fois
0
cs_DG78 Messages postés 10 Date d'inscription samedi 18 janvier 2003 Statut Membre Dernière intervention 7 avril 2012
7 avril 2012 à 19:41
J'utilise à peu près le même code et j'ai le même problème.
Au début, je pensais que :
cb = TryCast(e.Control, ComboBox)
créait un nouvel objet cb donc le RemoveHandler ne sert à rien.

J'ai donc mémorisé le combo sur lequel on fait le AddHandler pour faire le RemoveHandler sur le combo mémorisé mais l'événement redirigé est toujours appelé plusieurs fois.

Par contre lors des appels supplémentaires, le SelectedIndex est égal à -1 donc je teste SelectedIndex et si =-1 je ne fais rien.
0
Genildf Messages postés 272 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 30 décembre 2015 1
10 avril 2012 à 10:26
Donc au fi=nal toujour pas de solution...

J'ai fini par gere le truc autrement en mettant une condition en ca sde double appel mais j'aurai quand meme preferée l'evite
0
Rejoignez-nous