VB Problem mit Picturebox und Koordinatensystem

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von MarcelBB.

    VB Problem mit Picturebox und Koordinatensystem

    Meine Picturebox1 hat eine Größe von 1244 x 696

    Height = PictureBox1.Size.Height
    Witdh = PictureBox1.Size.Width

    (Mit oder ohne .Size) liefert für Breite und Höhe aber immer 1980 x 1024 also die Größe der Form1.

    Habe zahlreiche Autosize,Zoom,Stretch Varianten ausprobiert und komme einfach nicht dahinter.
    Ich möchte die Grafikbox für ein X/Y Koordinatensystem nutzen um Kurvenverläufe anzuzeigen.

    Dabei habe ich einen Skalierungsfaktor für Breite und Höhe, aber fast die Hälfte aller Linien landet rechts neben der Picturebox im Nirwana da die verwendete Breite und Höhe ja nicht stimmen.

    Hier das Meisterwerk.

    VB.NET-Quellcode

    1. Private Sub PictureBox1_Paint(yUpper As Integer, yLower As Integer, median As Integer)
    2. Dim e As System.Drawing.Graphics
    3. e = PictureBox1.CreateGraphics
    4. Dim yzero As Integer = Val(PictureBox1.Size.Height / 2)
    5. Dim ymax As Integer = Val(PictureBox1.Size.Height)
    6. Dim xmax As Integer = Val(PictureBox1.Size.Width)
    7. Dim x As Integer = 0
    8. Dim y As Integer = 0
    9. Dim Height = PictureBox1.Size.Height
    10. Dim Witdh = PictureBox1.Size.Width
    11. Dim counter As Integer = Threshold ' Threshold added
    12. Dim yFactor = (Height * YScale) / (yUpper - yLower)
    13. Dim xStepping As Integer = Witdh / 10
    14. Dim yStepping As Integer = Height / 20
    15. Do Until counter + Threshold = RawDataArray.GetUpperBound(0) '
    16. x = counter * Width / NumberofSamples - Threshold '
    17. y = Convert_Value_to_Coordinates(y, yFactor, counter, ymax, yStepping)
    18. e.DrawLine(pen6, xOld, yOld, x, y) ' Kurvenpunkt
    19. counter += 1
    20. xOld = x
    21. yOld = y
    22. Loop
    23. ' Y-50% Line
    24. e.DrawLine(pen5, 0, yzero, xmax, yzero) ' Null Linie
    25. ' Draw X-Grid
    26. For i = 0 To Width Step xStepping
    27. RichTextBox1.Text = RichTextBox1.Text & "0-" & i & "x" & Height & "-" & i & " " & vbCrLf
    28. e.DrawLine(pen8, i, 0, i, Height)
    29. Next
    30. ' Draw Y Grid
    31. For i = 0 To Height Step yStepping
    32. e.DrawLine(pen8, 0, i, Witdh, i)
    33. Next
    34. ' Draw X indexer
    35. For i = 0 To Width Step xStepping
    36. e.DrawLine(pen3, i, 0, i, 20)
    37. Next
    38. ' Draw Y indexer
    39. For i = 0 To Height Step yStepping
    40. e.DrawLine(pen3, 0, i, 20, i)
    41. Next
    42. ' Draw xTime
    43. Dim x1 = CSng(Witdh / 2 - 105)
    44. Dim x2 = xStepping * 5
    45. e.DrawLine(pen4, x1 - 15, 15, x2, 15)
    46. DrawRectangle(e, x1)
    47. e.DrawString("t:" & Xtime / 10 & "mS", Font1, Brush3, x1 + 10, 5)
    48. ' Draw Median Line
    49. Dim YMedian As Integer = yUpper - (median / yFactor)
    50. YMedian = ymax - YMedian / yFactor
    51. YMedian = YMedian * YScale
    52. Dim YSize As Integer = Width * yFactor
    53. YMedian = Convert_Value_to_Coordinates(y, yFactor, counter, ymax, yStepping)
    54. e.DrawLine(pen4, 0, YMedian, YSize, YMedian)
    55. e.FillRectangle(Brush2, Witdh - 80, YMedian - 10, 80, 20)
    56. Witdh = Val(PictureBox1.Width)
    57. RichTextBox1.Text = RichTextBox1.Text & Width
    58. e.DrawString("M:" & median & "mV", Font1, Brush1, YSize, YMedian - 10)
    59. End Sub
    60. Function Convert_Value_to_Coordinates(yConv As Integer, yFactor As Integer, index As Integer, ymaxConv As Integer, ysteppingConv As Integer)
    61. yConv = yUpper * yFactor - RawDataArray(index) * yFactor ' Umrechnung Wert in Koordianten Step I
    62. yConv = ymaxConv - yConv ' Umrechnung Wert in Koordianten Step II Spiegeln
    63. yConv = yConv - ysteppingConv ' Umrechnung Wert in Koordianten Step II Y-zentrieren
    64. Return yConv
    65. End Function
    66. Private Sub DrawRectangle(e As Graphics, x1 As Integer)
    67. e.FillRectangle(Brush2, x1 + 10, 5, 70, 20)
    68. End Sub
    Unkompilierbarer Code, da zu viele Dinge bei Dir zwar definiert sind, aber nicht bei uns: Threshold, RawDataArray, usw.
    Option Strict Off, VB6-Namespace. <X
    Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden.
    Wahrscheinlich einer Deiner Hauptprobleme - neben den genannten: Zeile#11: Witdh - eine eigene, wenn auch falschgeschriebene Variable. Die Konsequenz: z.B. in Z#29 verwendest Du Width. Und das ist die Formbreite, nicht Deine eigene Variable! Und schon kommt wohl Mus raus.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    VaporiZed schrieb:

    .
    Wahrscheinlich einer Deiner Hauptprobleme - neben den genannten: Zeile#11: Witdh - eine eigene, wenn auch falschgeschriebene Variable. Die Konsequenz: z.B. in Z#29 verwendest Du Width. Und das ist die Formbreite, nicht Deine eigene Variable! Und schon kommt wohl Mus raus.


    :whistling: ...
    Variable einmal in der Hektik falsch geschrieben und deklariert. Das war es. Ich gelobe demütig Besserung..