Verständnisfrage bei Drawline

  • VB.NET
  • .NET (FX) 4.0

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

    Verständnisfrage bei Drawline

    Hallo Leute,

    ich habe einmal eine Verständnisfrage zu dem Befehl Drawline.
    Ich möchte auf dem Formular eine Textbox mit zwei horizontalen Linien unterstreichen.
    Das funktioniert auch, es sieht ein bisschen komisch aus.

    Hier vorab mein Code:

    Quellcode

    1. Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
    2. Dim _Top As Single = TxtCurrency.Top + TxtCurrency.Height + 2
    3. Dim _Width As Single = TxtCurrency.Width * 2 + 9
    4. Dim _Left As Single = TxtCurrency.Left
    5. Dim pointA1 As New PointF(_Left, _Top)
    6. Dim pointA2 As New PointF(_Width, _Top)
    7. Dim myPen As New System.Drawing.Pen(System.Drawing.Color.Black)
    8. Dim formGraphics As System.Drawing.Graphics
    9. formGraphics = Me.CreateGraphics()
    10. formGraphics.DrawLine(myPen, pointA1, pointA2)
    11. Dim pointB1 As New PointF(_Left, _Top + 2)
    12. Dim pointB2 As New PointF(_Width, _Top + 2)
    13. formGraphics.DrawLine(myPen, pointB1, pointB2)
    14. myPen.Dispose()
    15. formGraphics.Dispose()
    16. End Sub


    1. Warum kann ich nicht einfach die txtCurrency.width für die Länge der Linie nehmen?
      Ich muss mir die Länge erst mühsam zusammenrechnen, was einfach unschön ist. Bei txtCurrency.Top funktioniert das ja auch, oder ist das Zufall?

    2. Warum muss ich eine zweite pointB[1|2]-Variable verwenden, wenn ich eine zweite Linie zeichnen möchte?
      Ich habe es schon versucht, die Variable pointA[1|2] einfach zu ändern und die zweite Linie zu zeichnen, das hat aber nicht funktioniert.
    Ich kenne mich mit den Draw-Befehlen nicht aus. Das ist totales Neuland für mich.

    Ich hoffe, jemand kann hier etwas Licht ins Dunkel bringen. :S

    Vielen Dank im Voraus.

    Gruß Nimrod
    @Achilleus Ich hoffe, der korrigierte Code beantwortet Deine Fragen vollständig:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
    2. Dim _Top As Single = TxtCurrency.Top + TxtCurrency.Height + 2
    3. Dim _Width As Single = TxtCurrency.Width
    4. Dim _Left As Single = TxtCurrency.Left
    5. Dim pointA1 As New PointF(_Left, _Top)
    6. Dim pointA2 As New PointF(_Left + _Width, _Top)
    7. e.Graphics.DrawLine(Pens.Black, pointA1, pointA2)
    8. pointA1 = New PointF(_Left, _Top + 2)
    9. pointA2 = New PointF(_Left + _Width, _Top + 2)
    10. e.Graphics.DrawLine(Pens.Black, pointA1, pointA2)
    11. End Sub

    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!