Actualiser donnée d'une form1 a form2

titus - Modifié le 30 août 2020 à 21:06
titus067 Messages postés 3 Date d'inscription dimanche 30 août 2020 Statut Membre Dernière intervention 31 août 2020 - 31 août 2020 à 04:02
bonjour a tous,

voila depuis peut , j'ai commencé a utiliser l'arduino, j'ai donc réussi a trouvé des tuto par ci par la pour l'utilise et avoir les donnée température et lumière sur le logiciel visual studio en utilisant visual basique tout fonctionne c'est super ^^

maintenant je souhaite faire évoluer un tout petit peut cela

j'ai la form1 qui et la page de connexion a l'arduino et qui affiche les donnée

j'ai la form2 qui affiche les donnée de la page 1 sans les outil de connexion a l'arduino ,

mais sur la form2 les donnée ne s'actualise que quand je clique avec la souris sur le label

si vous auriez la solution pour que les donnée de la form2 s'actualise sans avoir besoin de cliquer sur le label se serait au super , j'ai tenter plusieurs méthode trouver sur le net la fonction refresh et autre rien ne fonctionne ^^'

voici le code de la form2

Public Class Form2
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Form1.Show()
        Me.Hide()
    End Sub
 
    Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click
        Dim text1 As String = My.Forms.Form1.Label1.Text
        Label1.Text = text1
    End Sub
 
    Private Sub Label2_Click(sender As Object, e As EventArgs) Handles Label2.Click
        Dim text1 As String = My.Forms.Form1.Label4.Text
        Label2.Text = text1
    End Sub
End Class

en vous remerciant par avance, tres bon weekend

7 réponses

Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
30 août 2020 à 19:18
ceci
    Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click
        Dim text1 As String = My.Forms.Form1.Label1.Text 'là
        Label1.Text = text1
    End Sub
 
    Private Sub Label2_Click(sender As Object, e As EventArgs) Handles Label2.Click
        Dim text1 As String = My.Forms.Form1.Label4.Text 'et là
        Label2.Text = text1
    End Sub


n'est pas super judicieux:
Cela sous entend qu'il n'y a qu'une seule instance de Form1, or il pourrait y en avoir plusieurs.
Et en plus c'est à la sauce VB6, pas VB.Net.

Si tu veux utiliser les controles des Form1, il est plus judicieux, de passer à l'instance de Form2 en cours la référence de l'instance de Form1.

Voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11107-interactions-entre-form-en-net-c-et-vb-net

Mais ça c'est encore de la bidouille.


La façon de faire qui coule de source pour moi, c'est d'écrire une classe métier dont le rôle est de faire le travail, c'est à dire de lire les données de ton arduino, ça n'est pas le rôle d'un formulaire (Est ce que dans ta voiture c'est le tableau de bord qui fait tourner les roues?)
Cette classe implémenterait INotifyPropertyChanged, c'est à dire qu'à chaque changement de valeur d'une propriété un évènement serait généré.

Tu passe l'instance de cette classe en paramètre à Form2 et tu bindes les propriétés sur les labels.
Et là dès qu'une nouvelle valeur est lue, les labels sont mis à jour.
Voir ce second tuto https://codes-sources.commentcamarche.net/faq/1291-utilisation-du-binding-au-travers-de-l-objet-databindingsource
1
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
30 août 2020 à 22:09
Le meilleur conseil que je puisse te donner c'est de laisser ton projet de coté quelques jours et de suivre un cours en ligne

Celui de Plasserre est très bien https://plasserre.developpez.com/cours/vb-net/ il s'adresse principalement au codeur qui vient de VB6 ou VBA, mais prend l'objet pour un effet de mode alors que c'est l'essence de .Net

Celui d'openclassroom est un peu moins accessible mais il met l'objet au coeur de l'apprentissage
1
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 31 août 2020 à 01:50
Bonjour
Je rejoins dans sa réponse Whismeril que je salue .
Ces cours te donneront des bases solides pour programmer en VB Net et ensuite , selon des cas spécifiques, tu auras ces mêmes bases pour approfondir un sujet particulier .
Même moi avec plus de 10 ans de VB Net en tant qu'autodidacte je m'y réfère toujours en cas de souci ou d'incertitude sur une notion en programmation VB Net .
Autre chose : donnes un nom parlant à tes contrôles . Pour Form1 par exemple "Button1" pourrait être remplacé par "ArduinoOpen" par exemple
Merci d'avoir posté ton code correctement .

1
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
30 août 2020 à 18:43
Bonjour
Tout d'abord pour poster du code prière de suivre ce tuto : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code .
Le code sera mis en forme avec couleur, indentation et numéros de ligne .

Maintenant dans ton projet quelle est la Form de démarrage ?
Pourquoi Afficher Form1 depuis un bouton de Form2 en cachant ensuite Form2 ?

Public Class Form2
   
   Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
      
      Form1.Show() ' affiche Form1
      Me.Hide() ' cache Form2

   End Sub

End Class







La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
0

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

Posez votre question
titus067 Messages postés 3 Date d'inscription dimanche 30 août 2020 Statut Membre Dernière intervention 31 août 2020
30 août 2020 à 19:05
d'accord desoler, merci pour la reponse rapide tout de méme ^^

alors la form de demarage est la form1

voici le tout expliquer avec les image et tout les code, se sera surement mieux ^^

form 1
sert a se connecter a l'arduino et prend les donnée de la textbox pour les afficher dans un label


voici le code de la form1
Public Class Form1  
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        arduino.PortName = ComboBox1.Text
        Try
            arduino.Open()
 
            Label5.Text = "conexion activer"
        Catch ex As Exception
            MsgBox("la porte n'est pas ouverte")
            If arduino.IsOpen = False Then
                MsgBox("la porte n'est pas ouverte")
            End If
        End Try
    End Sub
 
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Try
            Timer1.Enabled = True
 
        Catch ex As Exception
            MsgBox("faux")
            Label5.Text = "pas de conection"
 
        End Try
    End Sub
 
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Try
            TextBox1.Text = arduino.ReadExisting
            Dim photoresist As String
            photoresist = (TextBox1.Lines(0).ToString)
 
            Dim temperature As String
            temperature = (TextBox1.Lines(1).ToString)
 
            Label1.Text = temperature
            Label4.Text = photoresist
 
 
        Catch ex As Exception
 
        End Try
    End Sub
 
    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        Form2.Show()
        Me.Hide()
    End Sub
End Class


ensuite je clique sur suivant se qui affiche la form2 et cache la form1

se qui affiche ceci , (cela affiche les donnée uniquement si je clique sur le label avec la souris et les actualise toujour quand je clique sur le label )

form2


le code de la form 2

Public Class Form2
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Form1.Show()
        Me.Hide()
    End Sub
 
    Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click
        Dim text1 As String = My.Forms.Form1.Label1.Text
        Label1.Text = text1
    End Sub
 
    Private Sub Label2_Click(sender As Object, e As EventArgs) Handles Label2.Click
        Dim text1 As String = My.Forms.Form1.Label4.Text
        Label2.Text = text1
    End Sub
End Class


et la je clique sur les label de la form2 et cela actualise les donnée


je souhaiterais faire actualiser les donnée de la form 2 sans avoir besoin de cliquer sur le label dans la form2
si vous auriez une direction a m'indiquer ou méme la solution se serais super, car la je bloque ^^"
toujours merci par avance pour l'aide apporté
0
titus067 Messages postés 3 Date d'inscription dimanche 30 août 2020 Statut Membre Dernière intervention 31 août 2020
30 août 2020 à 20:46
d'accord, merci pour la réponse,
c'est vrai que je suis un total débutant j'ai trouver des tuto par ci par la qui ont fait fonctionner cela et on va dire pour moi et mais besoin cela me suffit mais cela reste tout de méme de la bidouille c'est certain ^^

au moin je comprend plus ou moin le principe de fonctionnement

je vais étudier les tuto pour voir si j'arrive a changer le tout pour faire fonctionner comme je le souhaite

je te remercie grandement pour le partage , j'actualiserais cette page si j'arrive a faire avancer ce projet ^^
0
titus067 Messages postés 3 Date d'inscription dimanche 30 août 2020 Statut Membre Dernière intervention 31 août 2020
31 août 2020 à 04:02
oui c'est un bon conseil, je vais faire cela, merci pour le lien il a l'air bien complet,

c'est vrai que je suis a la merci de tuto en bidouillant par ci par la, j'arrive a faire fonctionner comme je le souhaite, je prend des note et j'avance petit a petit, mais des base plus solide seront certainement mieux sur la durée

je vais aller dans cette direction, en vous remerciant pour vos conseil,
je vous souhaite une agréable semaine et une très bonne continuation
0
Rejoignez-nous