Partage
  • Partager sur Facebook
  • Partager sur Twitter

mini-tchat VB - timer

Sujet résolu
    6 avril 2012 à 9:13:40

    Bonjour,

    Je commence à devenir fou avec le timer VB.
    Voilà, je suis en train de faire un mini-tchat.

    J'ai fait les formulaires avec les richText et tout le tatoin, maintenant, je souhaite rafraichir tout les secondes mon richText ou les message, j'ai déjà fait la méthode pour rafraichir(même si sa clignote, que ça se remet au début, et que ça fait sale).

    Maintenant, il faut que je fasse en sorte ça ma fonction rafraichir se fasse toutes les secondes, mais voilà, je pige pas un broc au timer en vb.



    Imports MySql.Data.MySqlClient
    Public Class Main
        'variable'
        Dim ligne As Integer
        Private connectionString As String = "Database=pti_vb;Data Source=localhost; User Id=root;Password="
        Private conn As MySqlConnection = New MySqlConnection(connectionString)
        Dim com As New MySqlCommand
        Dim query As New MySqlDataAdapter
        Dim tResult As DataTable = New DataTable
    
    
    
        Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim chaine As String
            Try
                With com
                    .Connection = conn
                    .CommandText = "SELECT pseudo_user, message_post, date_post FROM post, user WHERE post.id_user_post = user.id_user;"
                End With
    
            Catch ex As Exception
                MsgBox("Pas de connection à la base")
            End Try
            query.SelectCommand = com
            query.Fill(tResult)
    
            ligne = tResult.Rows.Count - 1
    
            For i = 0 To tResult.Rows.Count - 1
                chaine = "<" & tResult.Rows(i).Item("pseudo_user").ToString() & "> : " &  tResult.Rows(i).Item("message_post").ToString()
                rtTchat.Text += chaine
                rtTchat.Text += vbCrLf
            Next
    
        End Sub
    
        'rafraichiement de la fenetre de tchat
        Public Sub refreshTchat()
            rtTchat.Clear()
    
    
            Dim chaine As String
            Try
                With com
                    .Connection = conn
                    .CommandText = "SELECT pseudo_user, message_post, date_post FROM post, user WHERE id_user_post = id_user;"
                End With
    
            Catch ex As Exception
                MsgBox("Pas de connection à la base")
            End Try
    
            query.SelectCommand = com
            query.Fill(tResult)
    
            If (ligne <> tResult.Rows.Count - 1) Then
                For i = ligne To tResult.Rows.Count - 1
                    chaine = "<" & tResult.Rows(i).Item("pseudo_user").ToString() & "> : " & tResult.Rows(i).Item("message_post").ToString()
                    rtTchat.Text += chaine
                    rtTchat.Text += vbCrLf
                    ligne = tResult.Rows.Count - 1
                Next
            End If
        End Sub
    End Class
    



    Je vous ai épargné les fonctions dont on a pas besoin.

    Bref je récapitule:
    Qu'est ce que je doit mettre dans la méthode Main_sub.Load() pour que le timer commance et répète ma méthode refreshTchat

    J'avais commencer comme ça mais ça fonctionne pas

    dim time as Timer
    time = new Timer
    time.Interval = 1000
    time.enabled = true
    


    Et après, sais absolument pas quoi faire.


    Merci par avance de votre aide
    • Partager sur Facebook
    • Partager sur Twitter
      6 avril 2012 à 13:57:45

      Il faut t'abonner à la notification du timer et le démarrer avec la méthode Start()
      • Partager sur Facebook
      • Partager sur Twitter
        6 avril 2012 à 16:31:08

        Bon je rajoute
        time.start()
        


        après ça se passe comment ?
        Imaginons que toutes les secondes, je veux afficher l'heure dans un label, je fais comment ?

        Parce que faite, j'ai beau lire des tutos, et autre sur le web, je pige pas comment ça fonctionne, j'ai vu aussi un truc avec _tick() pour les méthodes, je vois pas comment on appelle se truc
        • Partager sur Facebook
        • Partager sur Twitter
          8 avril 2012 à 12:43:47

          Il faut que tu crée un timer pour commencer. Imaginons que le le nomme timer_refresh.
          Tu peux soit le créer graphiquement, soit l'instancier avec le code.

          Je vais t'expliquer pour le code.

          Dans ton Main_Load, tu commence avec
          Dim timer_refresh As New Timer 'Tu commence par creer le timer
          timer_refresh.Interval = 1000 'Tu choisis son interval d'éxectution (La, 1000 miliseconde soit 1 seconde)
          timer_refresh.Enabled = False
          


          Ensuite, lorsque tout ton chat est correctement démarrer et que tu souhaite qu'il commence à ce rafraichir, tu vas pouvoir démarrer ton timer en ajoutant cette ligne de code a ton sub.

          timer_refresh.Enabled = True
          


          La dernière étape est donc de dire a ton timer ce qu'il doit faire à chaque rafraichissement, pour cela tu lui déclare son propre sub dans lequel tu lui dira de démarrer ton sub "refreshTchat"

          Private Sub timer_refresh_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
          refreshTchat()
          End Sub
          


          Voila pour ce que tu souhaite faire.
          Mais avec cet interval a ton timer, et ta fonction refresh, tu ne va pas pouvoir te servir de ta fenêtre, elle va friser tout de suite et tout le temps.. Il faudrait que tu mette ta fonction dans un backgroundworker.

          J'espère avoir été clair.

          Nanoux
          • Partager sur Facebook
          • Partager sur Twitter
            9 avril 2012 à 4:13:26

            Merci beaucoup, j'y vois plus clair à présent sur le timer.
            Je me suis documenter sur le backgroundworker et ça fonctionne(j'arrive à l'utiliser)
            le problème que j'ai maintenant c'est

            Erreur 1 La clause Handles requiert une variable WithEvents définie dans le type conteneur ou l'un de ses types de base. C:\Users\Ludo\AppData\Local\Temporary Projects\pti_miniTchat\Form1.vb 116 104 pti_miniTchat


            Voilà le nouveau code à présent :
            Imports MySql.Data.MySqlClient
            
            Public Class Main
                'variable'
                Dim ligne As Integer
            
                'Variable pour la base de données
                Private connectionString As String = "Database=pti_vb;Data Source=localhost; User Id=root;Password="
                Private conn As MySqlConnection = New MySqlConnection(connectionString)
                Dim com As New MySqlCommand
                Dim query As New MySqlDataAdapter
                Dim tResult As DataTable = New DataTable
            
                'timer
                Private timer As Timer
            
                Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            
                    'INITIALISATION DE LA RICHTEXT DU TCHAT
                    '-------------------------------------------------
                    Dim chaine As String
                    Try
                        With com
                            .Connection = conn
                            .CommandText = "SELECT pseudo_user, message_post, date_post FROM post, user WHERE post.id_user_post = user.id_user;"
                        End With
            
                    Catch ex As Exception
                        MsgBox("Pas de connection à la base")
                    End Try
                    query.SelectCommand = com
                    query.Fill(tResult)
            
                    ligne = tResult.Rows.Count - 1
            
                    For i = 0 To tResult.Rows.Count - 1
                        chaine = "<" & tResult.Rows(i).Item("pseudo_user").ToString() & "> : " & tResult.Rows(i).Item("message_post").ToString()
                        rtTchat.Text += chaine
                        rtTchat.Text += vbCrLf
                    Next
                    '-------------------------------------------------
            
            
                    'TIMER
                    '-------------------------------------------------
                    timer = New Timer
                    Timer.Interval = 1000
                    timer.Enabled = False
                    bgWorker.RunWorkerAsync()
                    '-------------------------------------------------
                End Sub
            
            
                'CLICK BOUTON "ENVOYER"
                '==================================
                Private Sub btnSendMsg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSendMsg.Click
            
                    Try
                        With com
                            .Connection = conn
                            .CommandText = "INSERT INTO post(id_user_post, message_post, date_post) VALUES ('1','" & rtSend.Text & "','" & Format(Now, "yyyy-MM-dd HH-mm-ss") & "')"
                        End With
                    Catch ex As Exception
                        MsgBox("Envoie non fait")
                    End Try
            
                    query.SelectCommand = com
                    query.Fill(tResult)
            
                End Sub
                '==================================
            
            
                'RAFRAICHISSEMENT DE LA RICHTEXT 
                '==================================
                Public Sub refreshTchat()
            
                    rtTchat.Clear()
                    Dim chaine As String
                    Try
                        With com
                            .Connection = conn
                            .CommandText = "SELECT pseudo_user, message_post, date_post FROM post, user WHERE id_user_post = id_user;"
                        End With
            
                    Catch ex As Exception
                        MsgBox("Pas de connection à la base")
                    End Try
            
                    query.SelectCommand = com
                    query.Fill(tResult)
            
                    If (ligne <> tResult.Rows.Count - 1) Then
                        For i = ligne To tResult.Rows.Count - 1
                            chaine = "<" & tResult.Rows(i).Item("pseudo_user").ToString() & "> : " & tResult.Rows(i).Item("message_post").ToString()
                            rtTchat.Text += chaine
                            'On saute une ligne
                            rtTchat.Text += vbCrLf
                            ligne = tResult.Rows.Count - 1
                        Next
                    End If
                End Sub
                '==================================
            
            
                'BACKGROUND WORKER
                '==================================
                Private Sub bgWorker_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgWorker.DoWork
                    timer.Enabled = True
                End Sub
                '==================================
            
            
                'TIMER DU RAFRAICHISSEMENT
                '==================================
                Private Sub timer_refresh_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timer.Tick
                    refreshTchat()
                    label.Text = Now
                End Sub
                '==================================
            
            End Class
            


            Encore merci de ton aide, c'est très gentil de ta part.

            Nohman
            • Partager sur Facebook
            • Partager sur Twitter
              9 avril 2012 à 12:18:49

              En fait pour pouvoir utiliser le mot-clé Handles, il faut avoir déclarer ton Timer dans le designer de Form1.vb.

              A partir de là, tu as deux choix :

              1) Soit tu déclare ton Timer dans le Designer et tu utilise Handles.

              2) Soit tu déclare ton Timer comme une variable commune à toute ta Form et tu écris cette ligne dans ta fonction Main_Load :

              AddHandler (Time.Tick), AddressOf timer_refresh_Tick
              



              J'espère que ma réponse t'aideras
              • Partager sur Facebook
              • Partager sur Twitter
                9 avril 2012 à 21:03:30

                Merci beaucoup à vous, ça se rafraichit enfin toutes les secondes.
                J'ai pas encore utiliser le backgroundworker, parce que j'attends de mieux comprendre comment je peux l'utiliser.

                Voici le code "final" :
                Imports MySql.Data.MySqlClient
                
                Public Class Main
                    'variable'
                    Dim ligne As Integer
                
                
                    'Variable pour la base de données
                    Private connectionString As String = "Database=pti_vb;Data Source=localhost; User Id=root;Password="
                    Private conn As MySqlConnection = New MySqlConnection(connectionString)
                    Dim com As New MySqlCommand
                    Dim query As New MySqlDataAdapter
                    Dim tResult As DataTable = New DataTable
                
                
                
                    Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
                
                
                
                        'INITIALISATION DE LA RICHTEXT DU TCHAT
                        '-------------------------------------------------
                        Dim chaine As String
                        Try
                            With com
                                .Connection = conn
                                .CommandText = "SELECT pseudo_user, message_post, date_post FROM post, user WHERE post.id_user_post = user.id_user;"
                            End With
                
                        Catch ex As Exception
                            MsgBox("Pas de connection à la base")
                        End Try
                        query.SelectCommand = com
                        query.Fill(tResult)
                
                        ligne = tResult.Rows.Count - 1
                
                        For i = 0 To tResult.Rows.Count - 1
                            chaine = "<" & tResult.Rows(i).Item("pseudo_user").ToString() & "> : " & tResult.Rows(i).Item("message_post").ToString()
                            rtTchat.Text += chaine
                            rtTchat.Text += vbCrLf
                        Next
                        '-------------------------------------------------
                
                
                        'TIMER
                        '-------------------------------------------------
                        time = New Timer
                        time.Interval = 1000
                        time.Enabled = True
                
                
                        '-------------------------------------------------
                    End Sub
                
                
                    'CLICK BOUTON "ENVOYER"
                    '==================================
                    Private Sub btnSendMsg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSendMsg.Click
                
                        Try
                            With com
                                .Connection = conn
                                .CommandText = "INSERT INTO post(id_user_post, message_post, date_post) VALUES ('1','" & rtSend.Text & "','" & Format(Now, "yyyy-MM-dd HH-mm-ss") & "')"
                            End With
                        Catch ex As Exception
                            MsgBox("Envoie non fait")
                        End Try
                
                        query.SelectCommand = com
                        query.Fill(tResult)
                
                    End Sub
                    '==================================
                
                
                    'RAFRAICHISSEMENT DE LA RICHTEXT 
                    '==================================
                    Public Sub refreshTchat()
                
                        rtTchat.Clear()
                
                        Dim chaine As String
                        Try
                            With com
                                .Connection = conn
                                .CommandText = "SELECT pseudo_user, message_post, date_post FROM post, user WHERE id_user_post = id_user;"
                            End With
                
                        Catch ex As Exception
                            MsgBox("Pas de connection à la base")
                        End Try
                
                        query.SelectCommand = com
                        query.Fill(tResult)
                
                        If (ligne <> tResult.Rows.Count - 1) Then
                            For i = ligne To tResult.Rows.Count - 1
                                chaine = "<" & tResult.Rows(i).Item("pseudo_user").ToString() & "> : " & tResult.Rows(i).Item("message_post").ToString()
                                'rtTchat.Text += chaine
                                rtTchat.AppendText(chaine)
                                rtTchat.AppendText(vbCrLf)
                                ligne = tResult.Rows.Count - 1
                            Next
                        End If
                    End Sub
                    '==================================
                
                    'TIMER DU RAFRAICHISSEMENT
                    '==================================
                    Private Sub time_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles time.Tick
                        refreshTchat()
                        label.Text = Now
                    End Sub
                    '==================================
                
                End Class
                


                J'ai plus qu'à régler mon problème de clignotement de rich text et c'est bon ^^
                • Partager sur Facebook
                • Partager sur Twitter

                mini-tchat VB - timer

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown