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 :

Modifier TextBox depuis un Thread situé sur un autre formulaire


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Modifier TextBox depuis un Thread situé sur un autre formulaire
    Bonjour,

    J'ai une question qui me parait assez récurrente pour avoir balayer la plupart des FAQ et forum ...

    Description du projet :

    Je possède un formulaire principale nommé baseForm
    Je possède un formulaire secondaire qui accueille une TextBox de console nommée consoleForm

    Je possède une classe qui effectue plusieurs calcules, nommée PoolingIP

    Lorsque l'on clique sur un bouton de baseForm, celui-ci creé un thread qui démarre la Public Sub "ecouteurUDP" de la classe PoolingIP

    (Cette sub écoute en permanence sur le portLocal spécifié, les trames UDP)

    J'aimerais déjà, que lorsque la sub "ecouteurUDP" se lance, un message dans ma TextBox de mon consoleForm.


    J'ai essayé le délégué de cette façon (issu du msdn) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       Delegate Sub SetTextCallback([text] As String)
     
     Private Sub SetText(ByVal [text] As String)
     
            ' InvokeRequired required compares the thread ID of the
            ' calling thread to the thread ID of the creating thread.
            ' If these threads are different, it returns true.
            If Me.textBox1.InvokeRequired Then
                Dim d As New SetTextCallback(AddressOf SetText)
                Me.Invoke(d, New Object() {[text]})
            Else
                Me.textBox1.Text = [text]
            End If
        End Sub
    Je cale donc ca dans mon consoleForm. De cette manière je pensais que mon 'ecouteurUDP' pourrait afficher ce qu'il reçoit grâce à l'appel : consoleForm.SetText("blablabla")

    ... Mais non !!

    J'ai fait un débogage pas à pas, et je me suis aperçu qu'il ne passe pas par la méthode 'invoke' de SetText !

    En fait celà fonctionne si le thread et la Box sont dans le même form. (ce n'est pas le cas ici )

    Je m'en réfère à vous ...

    Merci pour votre aide.

  2. #2
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Màj :

    En fait je m'aperçois que le problème ne vient pas du fait que ce soit une 'classe' qui fasse appel à la méthode SetText.

    En effet lorsque je fais la même chose de mon baseForm vers mon consoleForm, cela n'affiche pas le texte.

    Le problème vient du fait que cette méthode soit situé sur un autre formulaire que celui du Thread courant ...

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    pas trop compris ton problème car normalement ce que tu veux faire fonctionne facilement

    sinon dans ton code tu demandes bien au textbox s'il faut invoker, par contre tu fais l'invoke sur Me
    rien de bien grave, mais la logique voudrait que tu invoke sur le textbox

    Citation Envoyé par Dalson Voir le message
    Màj :

    En fait je m'aperçois que le problème ne vient pas du fait que ce soit une 'classe' qui fasse appel à la méthode SetText.

    En effet lorsque je fais la même chose de mon baseForm vers mon consoleForm, cela n'affiche pas le texte.

    Le problème vient du fait que cette méthode soit situé sur un autre formulaire que celui du Thread courant ...
    une form est une classe avant tout
    toutes les forms sont dans le meme thread à priori

  4. #4
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Mince, je n'étais pas claire


    Je réexplique : J'ai une form exécutant un thread. J'ai une autre form possédant un TextBox, je voudrais que le thread de ma 1ere form modifie le text du textBox (situé sur l'autre form)

    Cette situation est facile à gérer lorsque l'on se situe dans le même formulaire (grâce au delegate) mais, dans ce cas, je n'arrive pas à afficher le text dans mon TextBox ...

    Merci quand même de ta réponse

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    il faut utiliser Invoke pour modifier l'UI à partir d'un autre thread
    fais une recherche sur Invoke, tu trouveras plein d'exemples

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    OK je vais voir ça, merci de ta réponse

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

Discussions similaires

  1. [Configuration] Copier une image située sur un autre serveur
    Par Graph-Site dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 20/08/2007, 09h02
  2. Acces a des fichiers situes sur une autre machine
    Par vsevel dans le forum Glassfish et Payara
    Réponses: 2
    Dernier message: 19/06/2007, 17h23
  3. [IIS] Partage situé sur un autre ordinateur
    Par broldorak dans le forum IIS
    Réponses: 2
    Dernier message: 02/04/2007, 16h32
  4. Afficher nombre de lignes d'une table située sur une autre feuille
    Par nemone dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 08/12/2006, 16h28
  5. [VB6] faire référence à un objet situé sur un autre form
    Par coyott dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 15/05/2006, 15h13

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