PictureBox1.CreateGraphics.Draw... im Formload

  • VB.NET

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

    PictureBox1.CreateGraphics.Draw... im Formload

    Hi Leute,

    ich zeichne mit CreateGraphics eine Zeichnung anhand von 2 Textboxen, welche ich bereits in den Eigenschaften mit Werten belegt habe (Breite, Winkel). Wenn der User nun die Textbox-Werte ändert, passt die Zeichnung sich auch an!

    da ich aber auch beim Formload die Zeichnung sehen möchte, habe ich ein Problem:

    Ich habe in einem älteren Thema bereits etwas gefunden:

    jvbsl schrieb in etwa folgendes:
    "CreateGraphics ist bei einem Zugriff aus einer anderen Methode als Paint notwendig...im Form Load funktioniert es nicht, da das Formular noch gar nicht angezeigt wird und außerdem werden solche Grafiken einfach übermalt, ich weiß ja nicht ob du das willst, aber wenn nicht, dann ist das Paint Event das richtige (und dort benutzt du dann natürlich auch e.Graphics.(Draw))"

    Somit kann ich die e.Graphics-Methode nicht nutzen!

    Drum muss ich es doch trotzdem irgendwie hinbekommen, eine Zeichnung ins Formload zu bekommen...

    (Mein Prog läuft ja eigentlich so, wie ich es möchte, wäre da nicht dieser kleine, nervige Schönheitsfehler im Formload!)

    Wer kann helfen?

    Danke im Voraus
    Leider kann ich das Paint-Event nicht nutzen...(Mein Prog ist etwas komplizierter, wäre auf jeden Fall sehr umständlich)

    Hab mir überlegt, das ich das Anfangsbild als Bitmap in die Picturebox stecke, muss es dann aber logischerweise löschen, wenn eine Eingabe getätigt wird...
    Habe folgendes versucht:

    VB.NET-Quellcode

    1. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    2. PictureBox1.Image = Nothing
    3. Call Zeichnen()
    4. End Sub


    Dann wird die Picturebox aber komplett geleert?!
    Wenn du sowieso eine Picturebox nutzen möchtest, würde ich auf ein Bitmap zeichnen. Dieses Bitmap ordnest du der PB.Image-Eigenschaft zu. Um das Bitmap zu löschen/leeren, reicht Bitmap=new Bitmap(Breite,Hoehe). Anschließend ein Graphics-Objekt auf das Bitmap festlegen (g=graphics.FromImage(Bitmap) und munter drauflos malen.
    Das ganze geht auch ohne Picturebox, wenn du im Paint-Event der Form das Bitmap mit e.graphics.DrawImage(Bitmap) malen lässt. Aufruf des Paint-Event von beliebiger Stelle aus mit Invalidate().
    Nebenher solltest du dich mit SetStyle im FormLoad-Event auseinandersetzen. Das bewahrt dich vor ruckelnder Grafik beim Ziehen des Fensters und Fehlzeichnungen, wenn du die Größe der Form veränderst.

    VB.NET-Quellcode

    1. Me.SetStyle(ControlStyles.DoubleBuffer Or ControlStyles.UserPaint Or _
    2. ControlStyles.AllPaintingInWmPaint Or _
    3. ControlStyles.SupportsTransparentBackColor Or _
    4. ControlStyles.ResizeRedraw, True)

    Fiel Fergnügen
    Vatter :D
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup: