Variable überwachen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Variable überwachen

    Ich habe bereits zu dieser Problematik im Internet (auch hier im Forum gesucht) kam jedoch leider bislang noch nicht weiter. Vielleicht auch, weil die meisten Themen dazu bereits recht alt sind(?)...

    Und zwar habe ich eine Variable namens Counter. Diese verändert sich sobald ein Signal vom Messplatz kommt, den ich ansteuere. Und zwar zählt die Counter Variable aufwärts. Nun werden jedes Mal wenn sich die Counter Variable ändert, vom Messplatz auch Messdaten mitgeschickt. Diese möchte ich speichern. Hierzu nutze ich sich selbst erweiterndes Array. Den Speichervorgang habe ich derzeit über eine IF-Schleife abgebildet, bzw. ist das mein Versuch. Das Sub mit der IF-Schleife möchte ich jedes Mal ausführen, wenn sich die Counter Variable ändert.

    Welchen Weg wähle ich am besten für meine Problemstellung? Ein Event auslösen, wenn sich die Variable ändert? Oder gibt es noch andere, einfache Wege?
    Hallo @FloMZ

    Ich mache sowas am liebsten über den Seter eines Propertys.

    z.b.

    VB.NET-Quellcode

    1. Public Sub MachWas()
    2. End Sub
    3. Private _counter As Integer
    4. Public Property Counter As Integer
    5. Get
    6. Return _counter
    7. End Get
    8. Set(value As Integer)
    9. _counter = value
    10. MachWas()
    11. End Set
    12. End Property


    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
    Hey, danke für die Antwort. Leider komme ich damit noch nicht ganz klar. Ich habe "counter" bereits als Double deklariert (public). Wenn ich es nun als Public Property deklariere gibt er mir mehrere Fehler aus. Oder stellt "Counter" in deiner Prozedur eine Hilfsvariable dar und muss dementsprechend neu deklariert werden?

    Mein zweites Problem ist, dass das ganze durch einen Button überhaupt erst scharf geschaltet werden soll. Mein Sub bis jetzt:

    VB.NET-Quellcode

    1. Private Sub BtnStartMessung_Click(sender As Object, e As EventArgs) Handles BtnStartMessung.Click
    2. If Counterchanged = True Then
    3. AnzDaten = AnzDaten + 1
    4. ReDim Daten(AnzDaten)
    5. Daten(AnzDaten).Ort_mm = counter / 60.937
    6. Daten(AnzDaten).Wert1 = CDbl(w1)
    7. Daten(AnzDaten).Wert2 = CDbl(w2)
    8. Daten(AnzDaten).Wert3 = CDbl(w3)
    9. Chart1.Series(0).Points.AddXY(Daten(AnzDaten).Ort_mm, w1)
    10. Chart1.Series(1).Points.AddXY(Daten(AnzDaten).Ort_mm, w2)
    11. Chart1.Series(2).Points.AddXY(Daten(AnzDaten).Ort_mm, w3)
    12. Chart1.Series(3).Points.AddXY(Daten(AnzDaten).Ort_mm, Tolmax)
    13. Chart1.Series(4).Points.AddXY(Daten(AnzDaten).Ort_mm, Tolmin)
    14. End If
    15. End Sub


    Wobei das mit der Counterchanged = True Abfrage nicht funktioniert und durch deinen Teil ersetzt werden soll.
    Verstehe nicht genau was du vorhast...

    FloMZ schrieb:

    Und zwar habe ich eine Variable namens Counter. Diese verändert sich sobald ein Signal vom Messplatz kommt

    Da steht nix davon das du per Button hochzählst. Wie du hochzählst ist aber auch mal egal.

    Ein Property kann auch nicht innerhalb einer Prozedur deklariert werden.
    Wenn es erst aktiv werden soll kannst du ja z.b. abfragen ob Countr > 0, wäre das nicht einfacher?

    Beispiel:

    VB.NET-Quellcode

    1. Class MainWindow
    2. Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
    3. Counter += 1
    4. End Sub
    5. Public Sub MachWas()
    6. 'Ich mach jetzt was weil der Counter hochgezählt hat.
    7. MessageBox.Show(Counter.ToString)
    8. End Sub
    9. Private _counter As Double
    10. Public Property Counter As Double
    11. Get
    12. Return _counter
    13. End Get
    14. Set(value As Double)
    15. _counter = value
    16. If Counter > 0 Then MachWas()
    17. End Set
    18. End Property
    19. End Class


    PS: Versuche Code zu verstehen nicht nur per Copy&Paste irgendwo hin zu kopieren, das wird dir nicht viel weiterhelfen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
    Okay, du hast recht, ich habe mich missverständlich ausgedrückt. Es verhält sich so:

    Ich habe einen Messplatz. Der schickt mir immer wenn ich damit messe und sobald das Programm eine Verbindung damit hergestellt hat, einen Counter-Wert und die dazugehörigen Messwerte. Nun möchte ich aber nicht immer die Werte speichern, deshalb habe ich einen Button hinzugefügt, der sozusagen das Speichern startet wenn ich das möchte (und ein anderer beendet es dann wieder). Das meinte ich mit der Steuerung der Speicherprozedur über einen Button.
    Siehst du...

    Hättest du versucht meinen code zu verstehen wärst du selbst draufgekommen.
    Ist nicht viel anders.

    VB.NET-Quellcode

    1. Class MainWindow
    2. Private Sub ButtonMachAktiv_Click(sender As Object, e As RoutedEventArgs)
    3. MeasuringActive = True
    4. End Sub
    5. Private Sub Button_SimuliereMessung(sender As Object, e As RoutedEventArgs)
    6. Counter += 1
    7. End Sub
    8. Private Sub Button_MachInaktiv(sender As Object, e As RoutedEventArgs)
    9. MeasuringActive = False
    10. End Sub
    11. Public Sub MachWas()
    12. 'Ich mach jetzt was weil der Counter hochgezählt hat.
    13. MessageBox.Show(Counter.ToString)
    14. End Sub
    15. Public Property MeasuringActive As Boolean
    16. Private _counter As Double
    17. Public Property Counter As Double
    18. Get
    19. Return _counter
    20. End Get
    21. Set(value As Double)
    22. _counter = value
    23. If MeasuringActive Then MachWas()
    24. End Set
    25. End Property
    26. End Class


    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
    Vielen Dank für deine Mühen, ich habe es in der Tat gleichzeitig mit deiner Antwort auch selbst soweit gebracht :thumbsup: Mit oben der Antwort wollte ich das nochmal für das Verständnis klar stellen.

    Soweit wird am Syntax auch nicht gemeckert, leider funktioniert die Darstellung der gespeicherten Punkte noch nicht so wie ich mir das vorstelle. Es wird nämlich einfach garnichts im Diagramm dargestellt... Genügt es nicht einfach, folgendes zu tun, um die Daten in einem bereits existierenden Diagramm darzustellen:

    VB.NET-Quellcode

    1. Private Sub SpeichernDiagramm()
    2. AnzDaten = AnzDaten + 1
    3. ReDim Daten(AnzDaten)
    4. Daten(AnzDaten).Ort_mm = Counter / 60.937
    5. Daten(AnzDaten).Wert1 = CDbl(w1)
    6. Daten(AnzDaten).Wert2 = CDbl(w2)
    7. Daten(AnzDaten).Wert3 = CDbl(w3)
    8. Chart1.Series(0).Points.AddXY(Daten(AnzDaten).Ort_mm, Daten(AnzDaten).Wert1)
    9. Chart1.Series(1).Points.AddXY(Daten(AnzDaten).Ort_mm, Daten(AnzDaten).Wert2)
    10. Chart1.Series(2).Points.AddXY(Daten(AnzDaten).Ort_mm, Daten(AnzDaten).Wert3)
    11. Chart1.Series(3).Points.AddXY(Daten(AnzDaten).Ort_mm, Tolmax)
    12. Chart1.Series(4).Points.AddXY(Daten(AnzDaten).Ort_mm, Tolmin)
    13. End Sub


    Muss man noch dafür sorgen, dass das Diagramm nach jedem Datenpunkt aktualisiert wird oder sonst etwas in der Richtung :?:
    Sorry, ich arbeite nie mit WinForms und weis es deshalb nicht auswendig. Aber da dies sowieso wieder ein anderes Thema ist würde ich an deiner stelle hier mal abschliessen, einen der Beiträge als Hilfreich markieren und einen neuen Thread öffnen da dies ja ein völlig anderes Problem darstellt.

    Grüße
    Saacha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.