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 :

probleme handles de form [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Par défaut probleme handles de form
    bonjour a tous
    j'ai créer des textbox dans ma form principal
    et j'aimerai (si c'est possible) lancer des événement de ces textbox a partir d'une autre classe que celle de la form principal

    en gros je souhaite déclarer un textbox dans le designer de la form1 et pouvoir gérer ses événement a partir d'une classe Autre1 et non la classe de la form1

    j'ai regarder pas mal de temps sur internet mais je n'ai pas trouver quelque chose de très clair
    c'est pour ça que je vous demande de l'aide

  2. #2
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Salut,

    C'est possible mais pour cela, il faut que ton autre classe connaisse ton form où se trouve ta textbox. Ensuite tu peux abonner manuellement une méthode de ta classe à un évènement de ta textbox.

    Exemple:
    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 Class1
     
        Private Form1 As New Form1
     
        Sub Test()
            AddHandler Form1.TextBox1.KeyPress, AddressOf TextBox1_KeyPress
        End Sub
     
        Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs)
            'a completer
        End Sub
     
    End Class

  3. #3
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    ou comme ça (pour se rapprocher de ce que tu veux faire):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Class Class1
     
        Sub SuscribeTextBoxKeyPressEvent(ByVal txtBox As TextBox)
            AddHandler txtBox.KeyPress, AddressOf TextBox_KeyPress
        End Sub
     
        Private Sub TextBox_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs)
     
        End Sub
     
    End Class
    Ici la classe ne connais pas directement le form ou la textbox mais on le lui a fournit par le biais de la méthode SuscribeTextBoxKeyPressEvent.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Par défaut
    merci pour ta réponse

    et donc la je n'ai plus besoin de déclarer mon événement dans la form1

    en faite je voudrai que lorsque l'on clic sur la textbox tout sont contenu soit null

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Class Class1
        Private Form1 As New Form1
     
        Sub Test()
            AddHandler Form1.TextBox1.Click, AddressOf TextBox1_Click
        End Sub
     
        Private Sub TextBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
            Form1.TextBox1.Clear()
        End Sub
    End Class
    mais la il ne se passe rien donc il doit me manquer quelque chose

  5. #5
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Alors ce que j'ai écrit ne sont que des exemples pour te montrer que c'est possible.

    Ajoute ces méthodes dans la classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Sub SuscribeTextBoxMouseClickEvent(ByVal txtBox As TextBox)
            AddHandler txtBox.MouseClick, AddressOf TextBox_MouseClick
        End Sub
     
        Private Sub TextBox_MouseClick(ByVal sender As Object, ByVal e As MouseEventArgs)
            Dim tb As TextBox = sender
            tb.Text = ""
        End Sub
    Ensuite, depuis ton form principal, tu abonne ta classe aux évènements TextBox.MouseClick:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim maclasse As New Class1()
    maclasse.SuscribeTextBoxMouseClickEvent(TextBox1)
    maclasse.SuscribeTextBoxMouseClickEvent(TextBox2)
    'etc.

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    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 204
    Par défaut
    tu ne veux pas lancer un évènement comme tu le dis, mais t'abonner à un évènement (il faut le bon jargon)

    s'abonner à des event de controls depuis des classes non graphiques relève dans la majorité des cas d'un gros défaut de conception

    après il te faut une référence de l'objet, vu que tu fais un new form1 dans ta classe, tu t'abonnes à l'event d'un textbox qui n'est même pas affiché (d'où le fait que tu ne vois rien fonctionner ...)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    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 204
    Par défaut
    comme dit précédemment

    Citation Envoyé par Pol63 Voir le message
    après il te faut une référence de l'objet, vu que tu fais un new form1 dans ta classe, tu t'abonnes à l'event d'un textbox qui n'est même pas affiché (d'où le fait que tu ne vois rien fonctionner ...)
    new créé une nouvelle form, enlève le new ce qui te permettra de réfléchir à ce que tu dois faire pour que ca marche
    pareil pour le new textbox, enlève le new
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Par défaut
    au depart je n'avais pas mis de new et sans compiller tout avait l'air de fonctionner
    sauf quand j'appel la variable de la form la il me mes d'utiliser un new

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Par défaut
    merci N4w4k
    ça fonctionne très bien

    désoler pol63 de ne pas utiliser le bon vocabulaire mais comme je l'ai mis dans le nom du sujet je suis debutant

    en tout cas merci a vous deux

  10. #10
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    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 204
    Par défaut
    Citation Envoyé par silace Voir le message
    désoler pol63 de ne pas utiliser le bon vocabulaire mais comme je l'ai mis dans le nom du sujet je suis debutant
    ce n'était pas un reproche mais une explication, c'est le but de ce forum ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    ce n'était pas un reproche mais une explication, c'est le but de ce forum ^^
    je m'en doute que se n'etait pas un reproche, et justement c'est sympa de faire remarquer lorsque l'on se trompe de vocabulaire

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Par défaut
    je vais continuer sur se sujet vu que le problème que je rencontre est lier

    alors une fois que mon évènement c'est déclencher j'appel une procédure sub dans un module différents (j'ai remplacer mes class par des modules je pense que c'est plus pratique)
    en gros j'ai ma form1 qui déclarer mes évènement , un module qui gere les différents évènements puis en fonction de l'evenement appel un procedure situer dans un module2 .
    mais le probleme c'est que dans le module2 je veut modifier les valeurs des objet de la form1, mais rien ne change ...

    alors que si j'appel cette meme procedure depuis la form1 la j'ai bien les modification voulu.

    je pense que c'est un probleme de declaration des objet mais je ne voit pas ...

  13. #13
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    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 204
    Par défaut
    il te manque quelques notions pour comprendre ce qui ne va pas
    un cours : http://plasserre.developpez.com/cours/vb-net/
    pour modifier form1, il ne faut pas écrire form1.quelquechose, vb.net l'autorise car il créé une variable de ce nom qui rend bien service au débutant, mais c'est une hérésie, ne serait-ce que parce qu'à un instant T il peut y avoir plusieurs form d'ouvertes, et une seule variable est alors hasardeux
    il faut une variable qui pointe vers la référence de form1 que tu veux manipuler pour ca il faut que ta form la renseigne dans la classe ou le module (mettre une variable sur le module et faire module1.instanceform1 = me sur le form)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Citation Envoyé par silace Voir le message
    mais le probleme c'est que dans le module2 je veut modifier les valeurs des objet de la form1, mais rien ne change ...
    Peut être aurais tu un bout de code à nous montrer pour te dire ce qui ne va pas.

    De plus, comme l'a dit Pol63 dans un message précédent, pour abonner des évènements d'un Form1 à un module il faut avoir une bonne raison car cela amène plein de problème en plus qu'il faut pouvoir gérer (comme des ObjectDisposedException ). Peut être que tu peux nous en dire un peu plus sur cette raison.. On pourra peut être te proposer quelque chose de plus propre.

  15. #15
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    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 204
    Par défaut
    ce n'est pas parce que le designer te dis qu'il faut écrire new qu'il faut le faire sans réfléchir/comprendre
    dans ce cas ce n'est pas la solution ...

    on va repartir du début

    Citation Envoyé par silace Voir le message
    en gros je souhaite déclarer un textbox dans le designer de la form1 et pouvoir gérer ses événement a partir d'une classe Autre1 et non la classe de la form1

    dans quel but ?
    si c'est juste pour un textbox abandonne l'idée tout de suite
    si c'est c'est pour ajouter un comportement à plusieurs textbox, créé un nouveau textbox avec ce comportement et utilises le sur tes forms ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  16. #16
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Citation Envoyé par silace Voir le message
    en gros je souhaite déclarer un textbox dans le designer de la form1 et pouvoir gérer ses événement a partir d'une classe Autre1 et non la classe de la form1
    Si c'est un principe général que tu souhaites mettre en oeuvre,
    peut-être devrais-tu t'inspirer du pattern "Model View Presenter".

    Voici un tutoriel (en C#) mais le chapitre II (implémentation classique du modèle) est très simple et te permettra de voir le principe.
    Cela semble correspondre a ce que tu souhaites faire.
    http://jab.developpez.com/tutoriels/dotnet/mvppattern/

    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  17. #17
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Par défaut
    merci pour toutes vos réponse
    et désoler de répondre aussi tardivement

    j'ai résolu mon problème en le contournant enfaite je voulais faire un module qui géré tous mes événements mais a la place j'ai juste déclarer la fonction a appeler quand l’événement se produisait
    je mets le sujet en résolu

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

Discussions similaires

  1. Probleme Changement de Forms
    Par spounk dans le forum Windows Forms
    Réponses: 11
    Dernier message: 06/03/2007, 14h52
  2. probleme acces au form mdi
    Par demande001 dans le forum Delphi
    Réponses: 7
    Dernier message: 26/11/2006, 09h40
  3. Réponses: 15
    Dernier message: 26/10/2006, 10h42
  4. Probleme avec Request.form
    Par joecool2005 dans le forum ASP
    Réponses: 1
    Dernier message: 29/05/2006, 15h32
  5. probleme de connexion forms-oracle
    Par bargou dans le forum Oracle
    Réponses: 2
    Dernier message: 11/11/2004, 11h27

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