Dauerhafte Vektorüberprüfung und Verhindern des Verschwindens einer Picturebox

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Dauerhafte Vektorüberprüfung und Verhindern des Verschwindens einer Picturebox

    Hallo,
    ich habe ein Programm, in welchem Daten in einem Vektor gespeichert werden, dann mit diesen Daten gerechnet werden sollen und abhhängig von diesen Daten eine Picturebox Bewegt werden soll. Mein Problem ist, dass zu der Textdatei welche ausgelesen wird immer neue Daten hinzugeschrieben werden. Wie kann ich und vorallem wo am besten in meinem Code den Vektor auf neue Daten überprüfen ? Die weiter Frage ist wie kann ich verhindern, dass die Picturebox welche abhängig von der Berechnung bewegt wird nicht aus dem "Rand" verschwindet? (Mein Versuch dazu ist auskommentiert im Code). Zur Information in berechnen wird später ein Algorithmus eingefügt das ist erst ein test.


    VB.NET-Quellcode

    1. Option Explicit On
    2. Imports System.IO
    3. Public Class Form1
    4. Dim DoubleData() As Double
    5. Dim counter As Integer
    6. Private Async Sub Get_Data()
    7. Const DATEINAME As String ="'C:\Users\Admin\Documents\jonasbanddats140.txt"
    8. Dim fs As FileStream = New FileStream(DATEINAME, FileMode.OpenOrCreate, FileAccess.ReadWrite) 'erstellen des FileStream
    9. Dim dummy_d() As String
    10. Dim i As Integer
    11. Dim komma As String = ","
    12. Dim punkt As String = "."
    13. Dim r As StreamReader = New StreamReader(fs) ' --- Zeiger auf den Anfang
    14. While Not r.EndOfStream
    15. Try
    16. Do
    17. dummy_d = r.ReadLine.Split(CChar(";")) 'nach ; Splitten
    18. counter = CInt(dummy_d.Length) 'Vektorlänge = Anzahl der Werte
    19. ReDim DoubleData(counter) 'oder ReDim Preserve Vektor löschen oder nicht
    20. For i = 1 To counter
    21. DoubleData(i) = CDbl(dummy_d(i).Replace(punkt, komma)) ' In DoubleVektor warum punkt komma problem
    22. ' Debug.Print(CStr(DoubleData(i)) & " " & CStr(i))
    23. Await Task.Delay(100) 'Dieser Delay wurde ausgeführt, damit dauerhaft in den Vektor geschrieben wird und das einlesen nicht beendet wird
    24. Next
    25. Loop
    26. Catch ex As Exception
    27. 'MsgBox(ex.Message)
    28. End Try
    29. End While
    30. r.Close() ' --- Reader und Stream schließen
    31. fs.Close()
    32. End Sub
    33. Private Async Sub Rechnen()
    34. Dim Wert As Double = 0.85
    35. For i = 1 To counter
    36. If DoubleData(i) > Wert Then
    37. PictureBox2.Location = New Point(PictureBox2.Location.X, PictureBox2.Location.Y - 3)
    38. 'If PictureBox2.Location.Y < Me.Location.Y Then
    39. ' PictureBox2.Location = New Point(PictureBox2.Location.X, PictureBox2.Location.Y) 'Versuch die Picturebox nicht aus dem Tand zu bekommen
    40. 'End If
    41. End If
    42. If DoubleData(i) < Wert Then
    43. PictureBox2.Location = New Point(PictureBox2.Location.X, PictureBox2.Location.Y + 3)
    44. 'If PictureBox2.Location.Y > Me.Location.Y Then
    45. ' PictureBox2.Location = New Point(PictureBox2.Location.X, PictureBox2.Location.Y)
    46. 'End If
    47. End If
    48. Await Task.Delay(250)
    49. Next
    50. End Sub
    51. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    52. Call Get_Data()
    53. Call abrunden()
    54. Call Rechnen()
    55. End Sub
    56. Private Sub abrunden()
    57. Dim YourPb As Object
    58. Dim Posx, Posy, diameter As Integer
    59. YourPb = PictureBox2
    60. Posx = 13
    61. Posy = 20
    62. diameter = 54
    63. Using gp As New System.Drawing.Drawing2D.GraphicsPath()
    64. gp.AddEllipse(Posx, Posy, diameter, diameter)
    65. YourPb.region = New System.Drawing.Region(gp)
    66. End Using
    67. End Class
    @Softdrink97 Willkommen im Forum. :thumbup:
    Wenn Du die Koordinaten der permanenten Positionierung berechnest, solltest Du sie unter Berücksichtigung der Größe der PictureBox und der Form do begrenzen, dass die PictureBox die Form nicht verlässt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany Danke Schön ^^
    Ja aber wie finde ich die Größe der Form (das Fenster kann ja verändert werden). Deswegen habe ich versucht mit "Me.Location.Y" die Grenze meiner Form herauszufinden, das hat aber nicht funktioniert.
    Hast du vielleicht auch eine Lösung für das Überprüfen meines Vektores? ?( Ich habe überlegt alle 30 sec den Vektor abzufragen oder in einer Schleife wenn sich die Länge ändert, aber wie genau weiß ich leider nicht ?(

    Ich danke dir für die schnelle Antwort

    Softdrink97 schrieb:

    die Grenze meiner Form herauszufinden, das hat aber nicht funktioniert.
    Du hast das ClientRectangle Deiner Form und Du hast das ClientRectangle Deiner PictureBox.
    Rechne sie in dasselbe Koordinatensystem um und feddich.

    VB.NET-Quellcode

    1. Dim frm = Me.PointToScreen(Me.ClientRectangle.Location)
    2. Dim pb = Me.PictureBox1.PointToScreen(Me.PictureBox1.ClientRectangle.Location)
    3. Me.Label1.Text = frm.ToString()
    4. Me.Label2.Text = pb.ToString()
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!