Zeichnen in MDI Form funktioniert nicht

  • VB.NET

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

    Zeichnen in MDI Form funktioniert nicht

    Hi,

    ich versuche schon länger bei einem Button-Klick ein Bild auf eine MDI Form zeichnen.

    Nur leider scheint das mit "CreateGraphics" nicht zu funktionieren... :thumbdown:

    Auch auf Google habe ich nichts passendes gefunden.

    Hier der Code:


    VB.NET-Quellcode

    1. ActiveMdiChild.Refresh()
    2. DrawJFrame()For i As Integer = 0 To JControls.Length - 1
    3. If JControls(i).Type = JControl.EType.JNull Then Exit ForIf JControls(i).Type = JControl.EType.JPanel Then DrawJPanel(JControls(i))
    4. Next

    VB.NET-Quellcode

    1. Public Sub DrawJPanel(ByVal JPanel As JPanel)
    2. Dim Graphic As Graphics = ActiveMdiChild.CreateGraphics()
    3. Graphic.DrawImage(JPanel.Image, JPanel.LocationX, JPanel.LocationY, JPanel.Width, JPanel.Height)
    4. End Sub


    Könnt ihr mir viellicht sagen, woran es liegt.
    Danke im Vorraus! :D



    EDIT:

    Hat sich erledigt, hab das Problem gefunden. Trotzdem danke!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „MrPropper“ ()

    So zeichnet man in ein MDI-Child

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. Dim MyChild As New System.Windows.Forms.Form()
    4. MyChild.MdiParent = Me
    5. MyChild.Show()
    6. MyChild.Text = "MDI Child"
    7. End Sub
    8. Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    9. Dim Graphic As Graphics = ActiveMdiChild.CreateGraphics()
    10. Graphic.FillRectangle(Brushes.Yellow, 0, 0, 50, 50)
    11. End Sub
    12. End Class
    Es sieht so aus, als ob eine MDI-Form (Parent) das Form1_Paint und das OnPaint unterdrückt. :S
    CreateGraphics() ist eine sehr schlechte Methode, da da kein Invalidate / Update möglich ist.
    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!
    Hab das mal getestet. Das Child so verschoben das das Rectangle weg war,
    Button geklickt, Rectanglewurde wurde neu "gemalt".

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Dim MyChild As New System.Windows.Forms.Form()
    3. MyChild.MdiParent = Me
    4. MyChild.Show()
    5. MyChild.Text = "MDI Child"
    6. End Sub
    7. Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    8. Dim Graphic As Graphics = MyChild.CreateGraphics()
    9. Graphic.FillRectangle(Brushes.Yellow, 0, 0, 50, 50)
    10. End Sub
    11. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    12. Me.Invalidate()
    13. End Sub


    edit: so wäre es noch besser:

    VB.NET-Quellcode

    1. Dim WithEvents MyChild As New System.Windows.Forms.Form()
    2. Private Sub MyChild_LocationChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyChild.LocationChanged
    3. Me.Invalidate()
    4. End Sub


    Falls das Child mal den Rand der form überschreitet.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Derfuhr“ ()

    MrPropper schrieb:

    Hat sich erledigt, hab das Problem gefunden.
    Lässt Du uns an Deiner Lösung teilhaben?
    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!