DrawLines - Letzte Line nicht zeichen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von samuel.

    DrawLines - Letzte Line nicht zeichen

    Hallo,

    ich zeichne einen Verlauf mit DrawLines mit folgendem Code:

    VB.NET-Quellcode

    1. Dim points(5) As Point
    2. Dim p As New Pen(Color.White, 2)
    3. 'Beispielwerte
    4. points(0) = New Point(0, 150)
    5. points(1) = New Point(10, 200)
    6. points(2) = New Point(20, 50)
    7. points(3) = New Point(30, 60)
    8. points(4) = New Point(50, 150)
    9. Panel1.CreateGraphics.DrawCurve(p, points)


    Jedoch zeichnet er vom letzten Punkt also 50/150 wieder zurück in den Ursprung 0/0.

    Wieso? Meine Linien sollen mit dem letzten Punkt enden?
    Was kann ich tun? (Außer die Linien einzel mit ner For zu zeichnen)
    Klassisches Problem, hatte ich, als ich anfing, auch :D

    Dim points(5) As Point Damit erstellst du ein Array, dass Elemente von 0 bis 5 enthält. Also 6 Stück!
    Da du nur die Elemente 0 bis 4 mit Werten befüllst, ist der 6. Wert, der mit dem Index 5, standardmäßig noch leer, also auf Point(0,0)

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    vb-checker schrieb:

    Klassisches Problem, hatte ich, als ich anfing, auch :D

    Dim points(5) As Point Damit erstellst du ein Array, dass Elemente von 0 bis 5 enthält. Also 6 Stück!
    Da du nur die Elemente 0 bis 4 mit Werten befüllst, ist der 6. Wert, der mit dem Index 5, standardmäßig noch leer, also auf Point(0,0)

    Danke dir.

    Irgendwie hatte ich im Kopf, dass ein Array immer mit der absoluten Anzahl an Entries angegeben wird und nur die Indexierung bei 0 beginnt. (Wie z.B. bei ListBoxen)
    Natürlich ein fataler Fehler und peinlich, da ich eigentlich kein Anfänger bin. (Hatte bisher keine Probleme damit)

    Artentus schrieb:

    da es z.B. bei C# genau so ist
    Dann sieh Dir mal solch Code im IlSpy oder so an, der macht es richtig.
    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!
    Wieder mal ein kleines Beispiel für die Gefahren von Redundanz.

    Hier redundant ist die Angabe der Anzahl der Punkte. Einmal wird sie bei der Deklaration des Arrays gegeben, und ein andermal durchs tatsächliche Zuweisen der Punkte - durchaus nicht unvertrackt ;)

    Zum Glück ist diese Redundanz heutzutage nichtmehr nötig, wenn man die Array-Initialisierer von VB.Net kennt:

    VB.NET-Quellcode

    1. Dim points As Point() = {
    2. New Point(0, 150), New Point(10, 200),
    3. New Point(20, 50), New Point(30, 60),
    4. New Point(50, 150)}
    ist kürzer gecodet und gleichzeitig redundanzfrei, weil der Compiler inzwischen gelernt hat, die Elemente selbst nachzuzählen :D

    ErfinderDesRades schrieb:

    Zum Glück ist diese Redundanz heutzutage nichtmehr nötig, wenn man die Array-Initialisierer von VB.Net kennt:

    VB.NET-Quellcode

    1. Dim points As Point() = {
    2. New Point(0, 150), New Point(10, 200),
    3. New Point(20, 50), New Point(30, 60),
    4. New Point(50, 150)}
    ist kürzer gecodet und gleichzeitig redundanzfrei, weil der Compiler inzwischen gelernt hat, die Elemente selbst nachzuzählen :D
    Ist mir nicht neu, da ich aber später um die 70 Points habe, die sich auch während der Laufzeit ständig ändern, macht ich das lieber nicht so.
    Aber danke.