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

VB.NET Discussion :

Evenements sur une List(Of Textbox)


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 64
    Par défaut Evenements sur une List(Of Textbox)
    Bonjour,

    je voulais savoir si il était possible de définir des événements sur une liste de textbox sans avoir à créer une classe pour les EventsArgs de ma liste, et ainsi éviter de définir chaque évenements à la main en utilisant Delegate.

    Il faut savoir que ma Liste de textbox est ajoutée dynamiquement à mon form via la commande :

    Form1.controls.add(...)

    Merci d'avance

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Vois l'utilisation éventuelle d'une ObservableCollection et fais le cablage de tes event handlers dans l'event handlers d'ajout de l'ObservableCollection.

    C'est une possibilité, parmis tant d'autres.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 64
    Par défaut
    Concrètement j'ai ma classe comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Class From1
        Public WithEvents listTxtbox As New List(Of TextBox)
     
        Private Sub listTxtbox_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles listTxtbox.Click
            'mon code
        End Sub
     
        Public Sub New()
     
        End Sub
    End Class
    Coment faire pour que mon "Handles listTxtbox.Click" ne donne pas l'erreur suivante : L'évènement "Click" n'est pas déclaré.

    Merci !

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Ben tu cables l'évenement dans le constructeur (la syntaxe en VB, je ne la connais pas, ce langage me donnant des boutons, désolé , mais c'est AddHandler ou un truc comme cela )

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 64
    Par défaut
    En apportant des changements, j'obtient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Class From1
        Public WithEvents listTxtbox As New List(Of TextBox)
         Public Delegate Sub EventHandler(ByVal sender As Object, ByVal e As EventArgs)
     
        Private Sub listTxtbox_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles listTxtbox.Click
            'mon code
        End Sub
     
        Public Sub New()
    Dim eventhdlr As New EventHandler(AddressOf Me.Textgpe_Click)
           Me.listTxtbox = New List(Of TextBox) AddHandler Click, AddressOf eventhdlr 
        End Sub
    End Class
    On a donc bien "Click" qui correspond à un la classe "Public Event Click()", et mon eventhdlr qui représent mon "EventHandler". cependant cela ne fonctionne pas ....

    A la place de créer un Delegate et d'instancier un eventHandler, n'est il pas possible de donner en paramètre une autre méthode de ma classe, tel que :

    Addhandler Click, AddressOf maFonction() ?

    Merci

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 64
    Par défaut
    Citation Envoyé par pounaid Voir le message
    En apportant des changements, j'obtient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Class From1
        Public WithEvents listTxtbox As New List(Of TextBox)
         Public Delegate Sub EventHandler(ByVal sender As Object, ByVal e As EventArgs)
     
        Private Sub listTxtbox_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles listTxtbox.Click
            'mon code
        End Sub
     
        Public Sub New()
    Dim eventhdlr As New EventHandler(AddressOf Me.Textgpe_Click)
           Me.listTxtbox = New List(Of TextBox) AddHandler Click, AddressOf eventhdlr 
        End Sub
    End Class
    On a donc bien "Click" qui correspond à un la classe "Public Event Click()", et mon eventhdlr qui représent mon "EventHandler". cependant cela ne fonctionne pas ....

    A la place de créer un Delegate et d'instancier un eventHandler, n'est il pas possible de donner en paramètre une autre méthode de ma classe, tel que :

    Addhandler Click, AddressOf maFonction() ?

    Merci

    Mon problème etait tout bête, il suffit de faire une boucle sur la liste et d'affecter avec AddHandler chaque élément de la liste, et non pas essayer d'affecter les évènements sur la liste elle même!

    Merci de ton aide Bluedeep !

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 193
    Par défaut
    penser au removehandler aussi
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 64
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    penser au removehandler aussi
    Bonjour, sperot51 tu fais bien de soulever la question !

    Supposons que je vide ma liste, est ce que les evènements seront toujours en mémoire pour les prochains objets ou bien le lien est détruit au même moment ?
    Si je suppose que tu insiste sur ce point c'est que d'un point de vue respect de codage c'est la méthode à utiliser

    Merci de vos réponses

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par pounaid Voir le message
    Bonjour, sperot51 tu fais bien de soulever la question !

    Supposons que je vide ma liste, est ce que les evènements seront toujours en mémoire pour les prochains objets ou bien le lien est détruit au même moment ?
    L'évenement est lié à une instance d'objet,pas à la liste (sauf cas de liste avec évenement, type ObservableCollection, mais ce n'est pas le cas ici).

    Donc, ton événement reste cablé tant que l'objet n'est pas "disposed".

  10. #10
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 64
    Par défaut
    C'est noté !

    Je pense que le problème est en plus d'être résolu, bien complet !

    Merci beaucoup !

  11. #11
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 193
    Par défaut
    Citation Envoyé par pounaid Voir le message
    Bonjour, sperot51 tu fais bien de soulever la question !

    Supposons que je vide ma liste, est ce que les evènements seront toujours en mémoire pour les prochains objets ou bien le lien est détruit au même moment ?
    Si je suppose que tu insiste sur ce point c'est que d'un point de vue respect de codage c'est la méthode à utiliser

    Merci de vos réponses
    un evenement est lié à une instance, tes prochains objets seront d'autres instances


    pour les removehandlers si on en crois microsoft, ce sont des ressources non managés (c'est à dire qui fonctionnent via l'os et qui prennent de la ram via l'os, que ton programme ne peut pas vider implicitement (garbage collector))
    et via reflector, toutes les classes du framework sont codées avec des removehandler dans le dispose de classes (meme le dispose venant du finalize pour les connaisseurs, qui n'est là que pour libérer les ressources non managées)
    donc si on suit l'exemple il faudrait surtout ne pas les oublier

    par contre quand on regarde un peu ce qui se passe niveau gestion des abonnements d'evenements on a l'impression que c'est managé via une bete collection, ce qui indiquerait que les oublier c'est pas grave

    bref ca fait longtemps que je cherche à connaitre ce point de détail de source sûre, les handler sont ils managés et si oui pourquoi etre obligé de les remover "manuellement"
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Evenement AfterUpdate Inopérant sur une liste de choix
    Par Jeanpierre71 dans le forum IHM
    Réponses: 6
    Dernier message: 03/12/2011, 12h31
  2. Réponses: 7
    Dernier message: 21/11/2011, 14h11
  3. [MooTools] Compatibilité de l'evenement mouseover sur une liste deroulante
    Par Samolo dans le forum Bibliothèques & Frameworks
    Réponses: 6
    Dernier message: 03/02/2011, 19h06
  4. Selectionnet tous ou faire un clear sur une liste
    Par Canou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/11/2004, 10h26
  5. [Débutant][jsp] évènement sur une liste
    Par phoebe dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 14/05/2004, 10h53

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