Drawing (Zeichnungsobjekt verschwindet nach minimieren der Form)

ja ok,

aber diese "Routine" muss im Paint-Event des Controls stattfinden.
Also wie bereits geschrieben:
Die Methode OnPaint überschreiben oder das Paint-Event abonnieren!
 
Weißt du, was Überschreibungen sind?

Du kannst eine eigene Klasse, die von PictureBox abgeleitet ist, definieren. z.b.:
Code:
Public Class KreisPictureBox Inherits Picutre Box
...
End Class
(Schreibe den Code nach dem Code für den Form-Editor)

Deine KreisBox muss dann von diesem Typ sein. Ändere also im Code für den Form-Editor einmal bei der Variablendeklaration (WithEvents KreisBox as PictureBox) den Typ um in KreisPictureBox und weiter unten (KreisBox = New PictureBox()) auch.

Dann kannst du in deiner eigenen Klasse (KreisPictureBox) die OnPaint-Funktion überschreiben.
Code:
Overrides Sub OnPaint(...)
...
End Sub
(Wähle hierzu im DropDown-Menü links oben (Überschreibungen) aus, dann im rechten OnPaint)

Da kannst du dann deinen Code einfügen. Müsste gehen.
Als Zusatz kann man auf diese Weise sogar DoubleBuffering aktivieren, doch dazu kommen wir später :-)
 
Nein Überschreibungen kenne ich noch nicht.
Trotzdem Danke für die Hilfe, werde das aber erst morgen überprüfen können.
 
Da ich das nun grundsätzlich verstehen möchte, bevor ich damit weiter arbeite will ich das an einem kurzen Bsp. aufgreifen:
Code:
Imports System.Windows
Imports System.Drawing

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
        Dim PictureBox1 As PictureBox = New KreisPictureBox
        PictureBox1.Show()
    End Sub
End Class


Public Class KreisPictureBox : Inherits PictureBox
    Protected Overrides Sub OnPaint _ 
    (ByVal e As System.Windows.Forms.PaintEventArgs)
        Dim g As Graphics
        Dim Pen1 As Pen
        Pen1 = New Pen(System.Drawing.Color.Black)
        g = e.Graphics
        g.DrawLine(Pen1, 0, 0, 300, 100)
    End Sub
End Class

1. Und jetzt die Frage: Wo ist der Fehler bzw. was muss ich beachten? ;-)
2. Des weitern würde ich gern wissen wie der Code lauten muss, dass ich auch die 2 Werte (300, 100) an das OnPaint-Ereignis übergeben kann?
 
Zuletzt bearbeitet:
Code:
Imports System.Windows
Imports System.Drawing

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
        Dim PictureBox1 As KreisPictureBox = New KreisPictureBox
        PictureBox1.Show()
    End Sub
End Class
'...

Das ist der Fehler :-)
Aber wenn du willst, dass die PictureBox angezeigt wird, musst du noch sagen, wo!
Ich nehme mal an auf deiner Form.
Also musst du sie der Collection der Form hinzufügen:
Code:
Me.Controls.Add(KreisBox)
(oder so ähnlich)
Das .Show() kannst du weglassen, das brauchst du nur nachdem du mal .Hide() gemacht hast.
 
Super, jetzt fällt's mir wie Schuppen von den Haaren.
Vielen Dank pro_pro_gger!

Vielleicht wenn Du oder jemand anders mir noch die 2. Frage beantworten könnte :confused:
"Des weitern würde ich gern wissen wie der Code lauten muss, dass ich auch die 2 Werte (300, 100) an das OnPaint-Ereignis übergeben kann?"
 
Zuletzt bearbeitet:
Argumente übergeben kannst du nur schwer.
Mach es doch so:
Füge deiner KreisPictureBox-Klasse ne Methode hinzu zum zeichnen.
Nenn Sie einfach Zeichnen() und gib ihr die benötigten Argumente.
Dann fügst du in der Klasse die gleichen Variablen hinzu.
Beispiel, wenn du die Größe und die Farbe übergeben möchtest:
Code:
Class KreisPictureBox : Inherits PictureBox
   Private Größe As Size
   Private Farbe As Color

   Sub Zeichnen(Größe As Size, Farbe As Color)
      Me.Größe = Größe
      Me.Farbe = Farbe
      Me.Refresh()
   End Sub

   .......
End Class

Dann kannst du im Paint-Ereignis auf Größe und Farbe zugreifen.

Freut mich dir geholfen zu haben... :-)

MfG
 
Zurück