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 :

Problème de Timer


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2013
    Messages : 5
    Par défaut Problème de Timer
    Bonjour, j'ai créé un programme de visualisation d'un electrocardiogramme, cependant il doit y avoir une erreur dans le code car le timer ne s'effectue pas. Voici mon code aider moi svp je m'arrache les cheveux depuis 2 jours et bloquer sur un truc aussi bête m'énerve tellement que j'en suis venu a poser ma question sur un forum!!

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    Imports System.IO
     
    Public Class Form1
     
        Dim tab As String
        Dim tab2 As Double
        Dim taille
        Dim min, max, h, scale1 As Double
     
     
        Private Sub Visualisation_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Visualisation.Click
            Dim loaddialog As New OpenFileDialog
            With loaddialog
                .Filter = "Fichiers DAT (*.dat)|*.dat"
                .FilterIndex = 1
                .ShowDialog()
                If .ShowDialog = DialogResult.OK Then
                    Dim filename As String
                    filename = .FileName
                    Dim lignes() As String = File.ReadAllLines(filename)
                    Dim taille = lignes.Length
                    Dim tab(taille) As String
                    Dim tab2(taille) As Double
     
     
     
     
                    Dim monStreamReader As StreamReader = New StreamReader(filename)
                    Dim ligne As String
     
                    For i = 0 To taille - 1
                        ligne = monStreamReader.ReadLine()
                        tab(i) = ligne
     
                    Next
                    monStreamReader.Close()
                    For i = 0 To taille - 1
                        tab2(i) = CType(tab(i), Double)
                    Next
                    min = tab2(0)
                    max = tab2(0)
                    For j = 0 To taille - 1
                        If tab2(j) > max Then
                            max = tab2(j)
                        End If
                        If tab2(j) < min Then
                            min = tab2(j)
                        End If
     
                    Next
                    h = max - min
                    scale1 = (200 / h) / 2
     
                    Timer1.Enabled = True
     
                End If
            End With
        End Sub
     
        Private Sub Sauvegarder_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Sauvegarder.Click
            Dim savedialog As New SaveFileDialog
            With savedialog
                .Filter = "Fichier Texte (*.txt) | *.txt"
                .FilterIndex = 1
                .CheckFileExists = False
                .FileName = "Consultation de " & RichTextBox1.Text & " " & RichTextBox2.Text & " du " & DateTimePicker1.Value.Day & " " & DateTimePicker1.Value.Month & " " & DateTimePicker1.Value.Year
     
     
                If .ShowDialog = DialogResult.OK Then
                    RichTextBox4.Text = " Nom : " & RichTextBox1.Text & vbCrLf & " Prénom : " & RichTextBox2.Text & vbCrLf & " Date de la consultation : " & DateTimePicker1.Value.Date & vbCrLf & " Interprétation du medecin : " & RichTextBox2.Text & vbCrLf
                    Dim file As System.IO.StreamWriter
                    file = My.Computer.FileSystem.OpenTextFileWriter(.FileName, True)
                    file.WriteLine(RichTextBox4.Text)
                    file.Close()
                End If
     
            End With
     
        End Sub
     
        Private Sub sto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sto.Click
            Timer1.Enabled = False
     
        End Sub
     
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Timer1.Enabled = False
            Timer1.Interval = 10
        End Sub
     
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            'ecg
            Dim coor As Integer
            Dim abs As Integer = 0
            Dim lig As Integer = 0
            Dim b As New Bitmap(PictureBox1.Width, PictureBox1.Height)
            Dim tab2(taille) As Double
     
     
            coor = scale1 * -1 * tab2(lig) + 50
            b.SetPixel(abs, coor, Color.GreenYellow)
            abs = abs + 1
            lig = lig + 10
            PictureBox1.Image = b
     
            If abs > 438 Then
                abs = 0
            End If
            'fin ecg
     
     
     
        End Sub
    End Class

    Voilà, lorsque j'enlève la partie entre "'ecg...'fin ecg" je peux la mettre avec une boucle for (en remplacant le lig par un conteur avec un pas de 10) dans le "bouton1_click" et cela m'affiche ce dernier parfaitement, mais je voudrais l'afficher en fonction du temps avec un timer, mais rien ne se passe.

    Le bouton "sto" est censé arrêter le timer et je le lance dans le bouton "visualisation"

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 199
    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 199
    Par défaut
    un point d'arrêt sur la ligne qui démarre le timer

    un point d'arrêt sur la sub du timer et du pas à pas dans ce code
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2013
    Messages : 5
    Par défaut
    J'ai mis des points d'arrêt là où tu me l'a indiquer et j'y suis allé pas à pas mais tout se passe normalement sans erreur sauf que rien ne s'affiche dans la pictureBox1 (le b.setpixel et le pictureBox1.image = b fonctionne tres bien hors du timer1_tick), ce n'est peut être pas cette réponse à la quelle tu t'attendais, je n'ai pas très bien compris ce que tu voulais que je fasse?!

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Bonsoir,

    Sauf erreur de ma part, il faut peut être demander au Timer de démarrer

    Timer.Enabled permet d'autoriser le timer à lever l'évènenement Elapsed pas à lancer le timer.

    Bon dev

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2013
    Messages : 5
    Par défaut
    Cela ne marche toujours pas, j'ai changé de place (mis en public les lignes dim abs as integer=0 et lig as double=0) car le timer devais les remettre à 0 a chaque fois qu'il recommençait et ça n'aurait pas marcher, mais même comme ça et avec un timer1.start() ça ne fonctionne pas, on dirait que le timer1_tick s'éxécute en mode invisible !!!

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 199
    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 199
    Par défaut
    Citation Envoyé par Rainui Voir le message
    Sauf erreur de ma part, il faut peut être demander au Timer de démarrer

    Timer.Enabled permet d'autoriser le timer à lever l'évènenement Elapsed pas à lancer le timer.
    et pourtant si, 99% de chance que le code de .Start soit me.enabled = true ...
    la flemme de vérifier au décompilateur, mais pour unform.hide ca fait .visible = false ^^



    Citation Envoyé par axonesx Voir le message
    J'ai mis des points d'arrêt là où tu me l'a indiquer et j'y suis allé pas à pas mais tout se passe normalement sans erreur sauf que rien ne s'affiche dans la pictureBox1 (le b.setpixel et le pictureBox1.image = b fonctionne tres bien hors du timer1_tick), ce n'est peut être pas cette réponse à la quelle tu t'attendais, je n'ai pas très bien compris ce que tu voulais que je fasse?!
    la 1ère chose à vérifier était que le code était bien exécuter, si tu as pu faire du pas à pas dans le .tick jusqu'au bout sans erreur c'est le cas
    le problème est serait donc dans le code lui même, par contre je vois pas où
    tu as vérifié les valeurs des variables ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2013
    Messages : 5
    Par défaut
    Voilà où en est mon timer1_tick, le code comportait des erreurs effectivement car tout s’exécutait bien mais rien ne se passait du je crois à l'initialisation de certaines variables à zéro), mais j'ai un autre problème mtn quand j’exécute pas à pas mon code il bloque sur la ligne :
    b.SetPixel(abs, coor, Color.GreenYellow)
    En me disant : "La référence d'objet n'est pas définie à une instance d'un objet."
    Le problème est surement que dans PictureBox1.Image il n'y a "Nothing", du coup je ne mets rien dans b et donc ce message serait compréhensible, mais comment faire sachant qu'il refuse aussi que je mette "Dim b as New Bitmap" (dans ce cas il me dit sur b : "la résolution de surcharge a échoué, car aucun 'new' accessible n'accepte ce nombre d'arguments")?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
     
            'ecg
            Dim lignes() As String = File.ReadAllLines(loaddialog.FileName)
            Dim taille = lignes.Length
            Dim tab2(taille - 1) As Double
            Dim monStreamReader As StreamReader = New StreamReader(loaddialog.FileName)
            Dim ligne As String
            Dim tab(taille - 1) As String
     
            For i = 0 To taille - 1
                ligne = monStreamReader.ReadLine()
                tab(i) = ligne
     
            Next
            monStreamReader.Close()
            For i = 0 To taille - 1
                tab2(i) = CType(tab(i), Double)
            Next
            min = tab2(0)
            max = tab2(0)
            For j = 0 To taille - 1
                If tab2(j) > max Then
                    max = tab2(j)
                End If
                If tab2(j) < min Then
                    min = tab2(j)
                End If
     
            Next
            h = max - min
            scale1 = (200 / h) / 2
     
            Dim b As Bitmap = PictureBox1.Image
            PictureBox1.BackColor = Color.Black
            b = PictureBox1.Image
     
            If lig >= taille Then
                lig = 0
            End If
     
            coor = scale1 * -1 * tab2(lig) + 50
            b.SetPixel(abs, coor, Color.GreenYellow)
            abs = abs + 1
            lig = lig + 10
            PictureBox1.Image = b
     
            If abs > 438 Then
                abs = 0
            End If
            'fin ecg
     
        End Sub
    End Class

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 199
    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 199
    Par défaut
    merci d'utiliser la balise code (bouton # dans la composition du message)

    une surcharge est une possibilité d'appel à une méthode
    un même nom de méthode peut etre déclaré plusieurs fois avec des paramètres différents en nombre et/ou type

    le new bitmap sans rien n'est pas possible par contre vous aviez précédemment utilisé une surcharge, pourquoi ne pas la garder ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim b As New Bitmap(PictureBox1.Width, PictureBox1.Height)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. Toujours un problème avec Timer
    Par adidas40 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/10/2006, 11h04
  2. Problème de Timer
    Par nikus_knx dans le forum MFC
    Réponses: 7
    Dernier message: 18/05/2006, 14h27
  3. Problème de Timer
    Par hammag dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 25/04/2006, 17h52
  4. [VC++ - MFC] Problème de Timer
    Par Alice9 dans le forum MFC
    Réponses: 4
    Dernier message: 08/02/2006, 13h51
  5. [VB6] Problème contrôle Timer et boucle For-Next ...
    Par Stéphane BEHMENBURG dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 01/12/2005, 17h36

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