GDI+ Linien nur bis X 261 Y 284 (Jetzt mit Problembild)

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Elephant.

    GDI+ Linien nur bis X 261 Y 284 (Jetzt mit Problembild)

    (War gestern zu Müde, habe vergessen ein Bild des Problems einzubauen)

    Ich fange grade mit GDI+ an.
    Hier die ersten Zeilen:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim z As Graphics = CreateGraphics()
    3. Dim stift1 As New Pen(Color.Red, 5)
    4. Dim stift2 As New Pen(Color.Green, 5)
    5. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    6. z.DrawLine(stift1, 20, 0, 20, 261)
    7. z.DrawLine(stift2, 30, 0, 30, 361)
    8. z.DrawLine(stift2, 0, 50, 284, 50)
    9. z.DrawLine(stift1, 0, 60, 384, 60)
    10. End Sub
    11. End Class

    So sieht das dann aus:

    Obwohl die Linien rechts und unten an verschieden Stellen enden müssten hören sie X und Y an der gleichen Stelle auf.
    Warum ist der Bereich in den Linien gezeichnet werden nur 261 Pixel breit und 284 Pixel hoch?

    *Topic verschoben*

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

    @Elephant Kopiere mal den Code in eine leere Form.
    Und:
    Was passiert, wenn Du ein anderes Fenster auf diesem Fenster loslässt und dann wegschiebst?
    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 schrieb:

    Was passiert, wenn Du ein anderes Fenster auf diesem Fenster loslässt und dann wegschiebst?

    Das es dann nicht neu gezeichnet wird weiß ich. Werde ich in dem, was ich machen will, auch ändern. (Kommt am Ende des Kapitels im Buch)
    Habe ich jetzt aber erstmal ausgespart da das Zeichnen der Linien schon nicht so funktioniert wie man es erwartet.

    Elephant schrieb:

    Ich fange grade mit GDI+ an.
    Dann wirf alles weg und mache es gleich richtig:
    Gemalt wird im Paint-Event.
    Dort wird alles "aus dem Gedächtnis" gezeichnet.
    Du findest im Forum beliebige Beispiele für "richtiges" Zeichnen.
    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!
    Nur zur Erklärung des genannten Phänomens:

    Zum Zeitpunkt des CreateGraphics-Aufrufs hat das Form noch eine Standardgröße, noch nicht Deine im Designer angezeigte Größe. Und diese Standardgröße wird dann für CreateGraphics beibehalten. Würdest Du schreiben:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim z As Graphics
    3. Dim stift1 As New Pen(Color.Red, 5)
    4. Dim stift2 As New Pen(Color.Green, 5)
    5. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    6. z = CreateGraphics()
    7. End Sub
    8. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    9. z.DrawLine(stift1, 20, 0, 20, 261)
    10. z.DrawLine(stift2, 30, 0, 30, 361)
    11. z.DrawLine(stift2, 0, 50, 284, 50)
    12. z.DrawLine(stift1, 0, 60, 384, 60)
    13. End Sub
    14. End Class

    dann würde alles richtig gezeichnet werden - zumindest, bis das Form größer gemacht wird (weil dann wieder die falsche Größe in z drinsteckt). Obwohl es natürlich immer noch der falsche Weg ist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.