Probleme de DataGridViewComboBoxCell avec EditingControlShowing

Signaler
Messages postés
272
Date d'inscription
lundi 12 janvier 2009
Statut
Membre
Dernière intervention
30 décembre 2015
-
Messages postés
272
Date d'inscription
lundi 12 janvier 2009
Statut
Membre
Dernière intervention
30 décembre 2015
-
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

Messages postés
272
Date d'inscription
lundi 12 janvier 2009
Statut
Membre
Dernière intervention
30 décembre 2015
1
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

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
Messages postés
272
Date d'inscription
lundi 12 janvier 2009
Statut
Membre
Dernière intervention
30 décembre 2015
1
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
Messages postés
272
Date d'inscription
lundi 12 janvier 2009
Statut
Membre
Dernière intervention
30 décembre 2015
1
pour cb il est declaré en public en
dim cb as combobox

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
Messages postés
272
Date d'inscription
lundi 12 janvier 2009
Statut
Membre
Dernière intervention
30 décembre 2015
1
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]
Messages postés
272
Date d'inscription
lundi 12 janvier 2009
Statut
Membre
Dernière intervention
30 décembre 2015
1
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

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
Messages postés
272
Date d'inscription
lundi 12 janvier 2009
Statut
Membre
Dernière intervention
30 décembre 2015
1
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
Messages postés
272
Date d'inscription
lundi 12 janvier 2009
Statut
Membre
Dernière intervention
30 décembre 2015
1
en fait quand je clique une fois sur le combobox ca marche
2 fois c plus bon car cela appel 2 fois

"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

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
Messages postés
272
Date d'inscription
lundi 12 janvier 2009
Statut
Membre
Dernière intervention
30 décembre 2015
1
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
Messages postés
10
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
7 avril 2012

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.
Messages postés
272
Date d'inscription
lundi 12 janvier 2009
Statut
Membre
Dernière intervention
30 décembre 2015
1
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