none
Comment indexer un ensemble de boutons (ou d'images) ? RRS feed

  • Question

  • Bonjour,

    étant débutant sur VB2010 je ne retrouve pas comment indexer un ensemble d'éléments tels que boutons ou images pour en faire un groupe comme on pouvait le faire en VB6.

    Par exemple image () et ensuite définir l'index

    Merci de votre aide

    Cordialement



    Lericou88

    lundi 2 juillet 2012 21:14

Réponses

  • Bonjour,

    Ouvrir peut-être une question par sujet ce qui est souvent plus facile à gérer que de mélanger deux sujets qui vont sans doute suivent chacun leur propre cheminement. Vous faisiez comment dans VB6 ? Je dirais un timer qui changerait l'image présente dans un PictureBox ? Ou si vous pouvez convertir vos images en gif animé, c'est supporté directement par le contrôle PictureBox. Cela pourrait être le plus simple.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    • Marqué comme réponse Lericou88 mardi 3 juillet 2012 11:55
    mardi 3 juillet 2012 11:33
    Modérateur
  • Lericou n°88, suite...

    Si tu as besoin de déclarer moult objets indexés, si tu veux j'ai fait un générateur de code (on lui passe le nom de la liste d'objets (lx), le nom de l'objet (button...), le nombre (n), le type de procédure (click...)) et il te fait le code à coller... M'écrire in fine...

    Sinon, vbNet est assez instable avec ce genre de rajout, si jamais par exemple tu enlèves un élément faisant partie du code qui gère les indexes (par erreur), il s'amuse à t'effacer tous tes noms des objets concernés après "Handles", et la procédure ne répond plus évidemment, alors faut réécrire les nom en fin, passionnnt :o)

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    • Marqué comme réponse Lericou88 mardi 3 juillet 2012 11:55
    mardi 3 juillet 2012 10:59

Toutes les réponses

  • je ne retrouve pas comment indexer un ensemble d'éléments tels que boutons ou images pour en faire un groupe comme on pouvait le faire en VB6.

    Bonjour lericou n°88 :o)

    Eh oui, en vb6 il suffisait de faire button1(x), mais là c'est bien plus compliqué, il faut faire une collection, comme ça :

    Dim b As New Collection() ' débute … 1 (monObj)
    
    Sub Load...
    b.Add(Button1) ' b(i) indice les objets
    b.Add(Button2)
    b.Add(Button3)
    For i = 1 To 3 ' test remplissage 
    Select Case i
    Case 1 : b(i).text = "un"
    Case 2 : b(i).text = "deux"
    Case 3 : b(i).text = "trois"
    End Select
    Next i
    End Sub 'load
    
    'UTILISATION 
    ' Ne pas oublier la fin de l'entête (nom des objets)
    
    Sub b_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Click, TextBox2.Click, TextBox3.Click
    Dim i
    For i = 1 To b.Count
    If b.Item(i).Name = sender.Name Then msgbox("L'index est : " & i)
    Next i
    End Sub
    

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    mardi 3 juillet 2012 07:43
  • Le concept de Groupe de contrôle n'existe plus en .NET comme en VB6.

    Maintenant, depuis 13 ans que je programme en .NET, je n'en ai jamais eu besoin. Vous voulez l'utiliser pour faire quoi ?

    NB : attention au code de EhJoe, en ajoutant les boutons dans la collection, vous rajoutez des références aux pointeurs vers les boutons donc ils seront "moins disposable" (mais c'est qu'un détail).


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mardi 3 juillet 2012 09:11
  • bonjour  Richard,
    merci de votre réponse.
    Il y a sans doute un autre moyen de faire ce que je souhaite en effet. J'essaye de transposer un projet VB6 sous VB2010
    En fait il y a deux choses :
    - je veux traiter un ensemble de boutons numérotés (cmdnb() ) pour faire un clavier numérique. Ce que je fais par un groupe de contrôle en VB6
    - je veux faire une animation graphique en affichant successivement un ensemble d'image. (même façon de faire dans vb6)
    Là j'ai grouper ces images dans une image list mais je ne sais comment traiter ensuite. 

    Lericou88

    mardi 3 juillet 2012 09:30
  • bonjour EHjoe,

    Merci de votre réponse.

    je vais tester votre code.

    Lericou88

    mardi 3 juillet 2012 09:31
  • Pour la gestion d'un même code pour plusieurs boutons, c'est relativement simple :

    Public Sub ClickSurLeBouton(sender as Object, e as EventArgs) Handles Bouton1.Click, Bouton2.Click, Bouton3.Click

    Dim btn as Button = CType(sender, Button)

    End Sub


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mardi 3 juillet 2012 09:53
  • Lericou n°88, suite...

    Si tu as besoin de déclarer moult objets indexés, si tu veux j'ai fait un générateur de code (on lui passe le nom de la liste d'objets (lx), le nom de l'objet (button...), le nombre (n), le type de procédure (click...)) et il te fait le code à coller... M'écrire in fine...

    Sinon, vbNet est assez instable avec ce genre de rajout, si jamais par exemple tu enlèves un élément faisant partie du code qui gère les indexes (par erreur), il s'amuse à t'effacer tous tes noms des objets concernés après "Handles", et la procédure ne répond plus évidemment, alors faut réécrire les nom en fin, passionnnt :o)

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    • Marqué comme réponse Lericou88 mardi 3 juillet 2012 11:55
    mardi 3 juillet 2012 10:59
  • Bonjour Richard,

    Et si tu devais faire un loto avec 49 boutons pour choisir les numéros (ici par exemple (2eme image) :

    http://irolog.free.fr/irolog_vente/loto_v/loto.htm

    Tu ferais comment sans indexer ces derniers (bien qu'il y ait plusieurs façon de dresser une liste d'objets) ?

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    mardi 3 juillet 2012 11:03
  • Bonjour,

    Ouvrir peut-être une question par sujet ce qui est souvent plus facile à gérer que de mélanger deux sujets qui vont sans doute suivent chacun leur propre cheminement. Vous faisiez comment dans VB6 ? Je dirais un timer qui changerait l'image présente dans un PictureBox ? Ou si vous pouvez convertir vos images en gif animé, c'est supporté directement par le contrôle PictureBox. Cela pourrait être le plus simple.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    • Marqué comme réponse Lericou88 mardi 3 juillet 2012 11:55
    mardi 3 juillet 2012 11:33
    Modérateur
  • Bonjour Patrice

    Il semble en effet que ce qui était pour moi un seul et même problème en ai généré deux.

    Pour ce qui est des boutons il me suffit de les traiter individuellement. 

    Pour l'animation j'utilise un timer qui agit dans une boucle, par l'index sur visible. rudimentaire mais efficace avec peu d'images.

    Je vais essayer de construire un gif animé, c'est sûrement le plus simple.

    En tout cas il est clair qu'il vaut mieux oublier le concept de groupe de contrôle.

    Merci à tous


    Lericou88

    mardi 3 juillet 2012 11:55
  • Ben y'a plein de solutions.

    Sans dériver la classe Button (ce qui serait la meilleure solution à terme), on peut mettre dans sa prop Tag le numéro du loto. Et donc dans la méthode qui s'abonne à l'event Click, dans CType(sender, Button).Tag, on a le numéro du loto ;-)


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mardi 3 juillet 2012 12:21
  • C'est surtout parce que qq va répondre aux groupes de contrôles qq d'autre à l'animation et si le sujet n'est pas rapidement clôt on finit par avoir deux sujets différents qui se croisent dans la même discussion ce qui devient vite difficile à suivre...

    Sinon dans .NET le principe est que l'on peut faire des tableaux de contrôles comme n'importe quel autre tableau et non pas sous la forme particulière des groupes de contrôles.

    Le premier point est sans doute que soit les contrôles existent déjà et on peut les répertorier explicitement dans une liste (ce que faisait VB6 au moment de la conception), soit ils sont créés dynamiquement (ce que l'on pouvait faire aussi avec VB6).

    J'ai tendance à dire que plus on de contrôle avec un comportement identique plus il devient intéressant de les créer dynamiquement...

    L'exemple de Ehjoe pourrait être (non testé) :

    Dim b As New List(Of Button) From {Button1,Button2,Button3} ' 
    Sub Load...
    Dim Data() As String={"Un","Deux","Trois"}
    For i = 0 To 2 ' test remplissage 
    b(i).text = Data(i)
    AddHandler b(i),AddressOf b_Click
    Next i
    End Sub 'load
    
    Sub b_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    MsgBox(b.IndexOf(sender))
    End Sub


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mardi 3 juillet 2012 12:42
    Modérateur