Controle utilisateur

Résolu
alligo Messages postés 38 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 9 novembre 2009 - 21 oct. 2008 à 00:03
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 - 21 oct. 2008 à 17:01
Bonjour a tous

j'ai créé un controle utilisateur (controle 1) (herité d'un bouton dont j'ai changé la forme). comme j'ai besoin d'enormement de ces controles, j'ai fait un autre controle utilisateur (controle 2) qui les regroupe tous.

dans le controle 2 je genere dynamiquement dans un tableau mes controles 1.

Je crée donc une form qui contient le controle 2. les controles 1 s'affichent corretement, et les evenements des controles 1 sont bien pris en charge

quand je clique sur un des controles 1 je declenche l'evenement surchargé de controle 1 mais le probleme est que dans la form qui utilise le controle 2 (et donc les controles 1) je voudrais recuperer l'index de mon tableau de controle pour savoir sur quel controle 1 j'ai cliqué

et je ne vois pas du tout comment faire

un peu d'aide ?

Merci

9 réponses

alligo Messages postés 38 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 9 novembre 2009
21 oct. 2008 à 14:06
Voila j'ai trouvé

je trouve ca un peu tiré par les cheveux mais ca marche ...

dans controle2 j'utilise la methode load pour charger mes controles1 et j'abonne mon controle2 a chaque evenement click de controle1 ...

dans la methode abonnée de controle2 je ets a jour une propriete de on controle2 avec l'index de controle1 a l'aide du sender et je lance un evenement ici onclick() mais ca pourrait etre n'importe lequel qui est surchargé et se charge de rendre dispo a la form mon index

code de control2 :

    Private Sub GroupedControl_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim i As Integer
        For i = 0 To 10
            myarray(i) = New Controls_Test.RoundButton(i)
            myarray(i).Visible = True
            Me.coord0 += Me.shiftl
            myarray(i).Location = Me.coord0
            myarray(i).Numero = i
            Me.Controls.Add(myarray(i))
            AddHandler myarray(i).Click, AddressOf myarray_click
        Next
        Me.Refresh()
    End Sub

    Private Sub myarray_click(ByVal sender As System.Object, ByVal e As System.EventArgs)

        Me.lala = sender.numero
        Me.OnClick(e)

    End Sub

pfiou c'etait pas simple ca je trouve ...

merci pour l'aide et merci d'avance pour les correrctions a faire si il y en a ...
3
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
21 oct. 2008 à 00:22
Bonjour,

dans ton contrôle 2 tu as accès a cet index ??


alors il te suffit de créer une propriété avec cet index

a+
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
21 oct. 2008 à 01:09
salut,
en effet c'est à controle2 de remonter l'évènement vers son conteneur, avec l'index de ta collection en argument/paramètre

++

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
alligo Messages postés 38 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 9 novembre 2009
21 oct. 2008 à 10:44
Oui d'accord, c'est un peu ce que j'avais deja fait mais ...

voici la portion de code pour la declaration du tableau :

        For i = 0 To 10
            myarray(i) = New Controls_Test.RoundButton(i)
            myarray(i).Visible = True
            Me.coord0 += Me.shiftl
            myarray(i).Location = Me.coord0
            Me.Controls.Add(myarray(i))
        Next


Je n'arrive pas a comprendre quel evenement est levé quand je clique sur des controles de mon tableau.

un truc du style myarray(i)_click ... mais je ne peux pas utiliser de i dans la declaration de variable.
une deuxieme solution serait de regarder quelle proprieté a changé dans mon tableau en les regardant les controles un par un ... mais je trouve ca moyen et le refresh ne fonctionne pas ex
        For i 0 To 10
            If myarray(i).isHighlighted = True Then
                lala = myarray(i).Numero 'lala est une propriete de ma classe
                Exit For
            End If
        Next


et encore je ne sais pas sur quel evenement de controle2 mettre cette portion de code car ne fonctionne pas sur click
0

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

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
21 oct. 2008 à 12:57
aucun rapport avec ta question de départ donc, ou alors je n'ai pas compris....

c'est "sender" qui doit te renvoyé les informations du bouton cliqué

voir les sources existantes pour savoir comment gérer les évènements sur des contrôles dynamiques
seulement une fois chose faite, tu pourras t'occuper du parent (controle2)

++

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
21 oct. 2008 à 14:46
Bonjour,

normalement tes control1 ont bien un evenement click??
si oui il suffit de tous les gerer dans une sub
sub MesControls1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)handles ctrr1.click ; ctr2.click ' et ainsi de suite
MyCtrIndex=sender.numero

End Sub

je ne sais pas si mon explication est claire pour toi mais voici un exemple avec des boutons










Public

indexCtrl1


As

UInt16








Private





Sub

Button1_Click(


ByVal

sender


As

System.Object,


ByVal

e


As

System.EventArgs)


Handles

Button1.Click, Button2.Click, Button3.Click



Dim

sa


As





Integer

sender.name.ToString.LengthindexCtrl1



CStr

(sender.Name).Substring(sa - 1)MsgBox(indexCtrl1)



End





Sub




 


a+
0
alligo Messages postés 38 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 9 novembre 2009
21 oct. 2008 à 15:54
Ta solution est interessante mais ... je peux avoir jusqu'a 400 controles ... dans ce cas je perds tout avantage de la prog si je dois taper a la main le nom de mes 400 controles?

ou n'ai pas compris qqch ?
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
21 oct. 2008 à 16:13
[../auteur/GILLARDG/1360034.aspx gillardg]

-> je ne comprends pas non plus l'intérêt de ta réponse, il est sujet de contrôles chargés dynamiquement

j'ai peut-être mal compris ta réponse?
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
21 oct. 2008 à 17:01
Bonjour,

si chargé dynamitement alors je suis à coté de mes pompes , sorry

a+
0
Rejoignez-nous