Zeichenbereich in Form zu klein

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Gaffel-K.

    Zeichenbereich in Form zu klein

    Schönen guten abend zusammen,

    dies ist mein erster beitrag und muss euch direkt mit einem problem belästigen. und zwar gehts um folgenden code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim z As Graphics = CreateGraphics()
    3. Dim stift As New Pen(Color.Red, 2)
    4. Dim pinsel As New SolidBrush(Color.Red)
    5. Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
    6. z.DrawLine(stift, 10, 10, 500, 370)
    7. z.DrawEllipse(stift, 150, 150, 180, 180)
    8. End Sub


    wenn ich nun das programm starte und in die form1 klicke zeichnet er zwar linie und kreis, aber es sieht so aus als wäre der zeichenbereich der form zu klein, der kreis ist nicht vollständig und die linie geht nicht bis zu den angegeben endkoordinaten.

    könntet ihr mir vielleicht sagen woran das liegt? hab auch schon die suche bemüht aber leider nix passendes gefunden.

    vielen dank schon mal

    Jan
    hab ich schon mal probiert, da zeichnet er auch über die ganze form.

    aber wie kann ich denn zur laufzeit dann die grafik aktualisieren? es geht mir darum dass ich zur laufzeit neue linien zeichnen lassen will, das hab ich noch nihct hinbekommen


    Jan
    Zeichne so im Paint Event:

    VB.NET-Quellcode

    1. 'Das Paint Event wird augelöst, wenn deine Form neu gezeichnet wird
    2. Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    3. e.Graphics.FillRectangle (Brushes.Black, 0, 0, Me.Size.Width, Me.Size.Heigth) 'Der Parameter
    4. 'e As System.Windows.Forms.PaintEventArgs besitzt einen Member Graphics von Typ Graphics,
    5. 'auf den du zeichnest
    6. End Sub

    Wenn dann eine neue Linie gezeichnet werden soll, setzt du eine Boolsche Variable auf True und zeichnest die Form mit

    VB.NET-Quellcode

    1. Me.Invalidate ()

    neu. Dann musst du im Paint Event nur noch die entsprechende Variable prüfen. Wenn diese dem Wert True entspricht, soll halt dann die Linie gezeichnet Werden.
    MfG TT
    es geht darum, dass ich zur laufzeit in einem bereich der form dort neue linie zeichnen will wo ich mit der maus hinklicke. deswegen sollte das möglich sein neue linien zur laufzeit zeichnen zu lassen.

    man kann doch bestimmt die koordinaten, die ich dem paintevent z.b. bei drawline verwende, wo anders im programm verändern oder? also ich meine X1 und Y1 z.b. an dieses paintevent übergeben
    Das ist ja fast dasselbe wie oben. Anstatt eines Booleans verwendest du halt Integers, die für X1, Y1, X2, Y2, Width und Heigth stehen. Diese musst du dann halt nur noch beim Zeichnen der Linie anstatt deiner Zahlenkonstanten einsetzten.
    da hab ich jetzt aber das problem, dass das rectangle-shape verschwindet. hab aber durch zufall eben den befehl REFRESH gelesen, damit geht das wunderbar.

    danke dir theotechnic für deine schnelle und super hilfe. damit kann das hier erst ma als geschlossen betrachtet werden.

    echt ein top forum hier...

    Jan
    Wenn du außerhalb des Paint-Event eine Linie, Kreis oder sonstwas hinzufügen willst, solltest du dich mal mit GraphicsPath beschäftigen. Das ist wie ein "Container" für alle möglichen Figuren. Wenn die hinzugefügten Linien einzeln dargestellt werden sollen, knnst du das mit FigurStart und End(oder so ähnlich) bewerkstelligen.
    Wenn du mit dem Hinzufügen per GraphicsPath.AddLine usw fertig bist rufst du mit Invalidate das Neuzeichnen der Form auf. Im Paint zeichnest du mit DrawPath deinen Graphicspath und damit alle deine Figuren.
    Eine weitere Möglichkeit besteht darin, deine Linien als Structur in einem Array oder einer List(Of T) zu verwalten und im Paint mit einer Schleife das Array zu durchlaufen. Das hat den Vorteil, dass eine Variable deiner Structur z.B. den Stift beinhalten könnte und somit jede Linie/Figur eine individuelle Farbe bekommen kann.
    Und dann könntest du auch mit Graphics.FromImage(EinBMP) auf ein Bitmap zeichnen und dieses im Paint mit DrawImage verwenden (oder alternativ als Image einer Picturebox zuweisen, was ich aber weniger elegant finde) Bei der Verwendung mehrerer Bitmaps kannst du z.B. in Ebenen zeichnen (Hintergrund, Vordergrund, Figuren usw.)
    Und nie vergessen, hinterher immer Invalidate()
    Die Graphics-Klasse bietet dir eine riesige Palette an Möglichkeiten (ma bei MSDN nachschauen)

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    ok super, das werde ich auch mal testen und mir mal durchlesen. nur manchmal hab ich mit msdn so meine probleme da alles zu verstehen was da so steht :)

    aber werde das mal durchlesen und anwenden, bin ja immer offen für neues.

    bin aber jetzt erst mal weg, ich sag ma bis später und vielen dank

    Jan