GDI+ Rechteck werden keine Werte übergeben

  • VB.NET

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

    GDI+ Rechteck werden keine Werte übergeben

    Hallo liebe Community,
    ich habe ein eigenartiges Problem, das ich noch nie hatte:

    Ich habe hier einen sehr primitiven Test-Code:

    VB.NET-Quellcode

    1. Dim g As Graphics = e.Graphics
    2. Dim i As Integer = 20
    3. Dim i2 As Integer = 40
    4. Dim i3 As Integer = 43
    5. Dim Total As Integer = i + i2 + i3
    6. Dim rect, rect2, rect3 As Rectangle
    7. Const BarWidth = 30
    8. Dim p1 = i / (Total / 100)
    9. Dim p2 = i2 / (Total / 100)
    10. Dim p3 = i3 / (Total / 100)
    11. Dim h1 = Me.Height * i / 100
    12. Dim h2 = Me.Height * i2 / 100
    13. Dim h3 = Me.Height * i3 / 100
    14. rect = New Rectangle(0, Height, BarWidth, h1)
    15. rect2 = New Rectangle(0, Height + h1, BarWidth, h2)
    16. rect3 = New Rectangle(0, Height + h1 + h2, BarWidth, h3)
    17. g.DrawRectangle(Pens.Red, rect)
    18. g.FillRectangle(Brushes.Green, rect2)
    19. g.FillRectangle(Brushes.Blue, rect3)
    20. Dim rect4 As New Rectangle(0, 0, 10, 10)
    21. g.DrawRectangle(Pens.Red, rect4)


    Dies sollte eigentlich mein Control auf die Values (i1-i3) aufteilen, und anschließend zeichnen.
    Dennoch funktioniert es nicht.

    h1-h3 haben einen Wert, das habe ich getestet.
    Dennoch werden keine Rechtecke gezeichnet.
    Wenn ich einen Haltepunk bei rect = New Rectangle setze, hat rect keinen Wert.
    Wenn ich einen auf rect2 setze bekommt rect einen Wert aber nicht rect2.


    Als rest habe ich anschließend rect4 erstellt.
    Dies wird perfekt gezeichnet.


    Könnt ihr mir weiterhelfen?
    Danke im Vorraus.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Gather schrieb:

    Könnt ihr mir weiterhelfen?
    Klar können wir.
    Mir erschließt sich irgendwie der Sinn deines Codes nicht, ich würde das eher so machen:

    VB.NET-Quellcode

    1. Dim g As Graphics = e.Graphics
    2. Dim values = {20, 40, 43}
    3. Dim fillBrushes = {Brushes.Blue, Brushes.Red, Brushes.Green}
    4. Dim total = CSng(values.Sum())
    5. Dim x = 0.0F
    6. For i = 0 To values.Length - 1
    7. Dim rectWidth = values(i) / total * Width
    8. g.FillRectangle(fillBrushes(i), New RectangleF(x, 0, rectWidth, Height))
    9. x += rectWidth
    10. Next
    Genau so was.
    Du zeichnest außerhalb der Form:

    Machma Option Strict On
    und Integer-Division geht so:

    VB.NET-Quellcode

    1. Dim h1 = Me.Height * i \ 100
    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!