Hallo.
sorry, aber ich finde es schon ziemlich unverschämt, mir vorzuwerfen ich hätte keine Ahnung und würde doofe Sprüche loslassen, obwohl ich dich doch nur darauf hinweisen wollte, dass dir anscheinend ein paar grundlegende Kenntnisse über das Zeichnen in WinForms fehlen (siehe Zitat: "zweitens, Paint-Ereignis ist nichts für mich, da ich per Button die Eingabe steuere. Ich ziehe nichts klein oder groß, also brauche ich keine Neuzeichnung!!!") und ich dir ja nur helfen wollte.
Wenn du dir meine Postings ein bisschen genauer durchgelesen hättest, hättest du vielleicht verstanden, welche Nachteile CreateGraphics() hat und wie man besser in ein Control zeichnen sollte.
Mit dem Zeichnen über das Paint-Ereignis (statt der CreateGraphics()-Methode) hätte es vermutlich geklappt.
Hier noch mal ein Beispielcode (ich geb zu, die Variablennamen sind hier auch nicht die besten ), wie man soetwas mit dem Paint-Ereignis machen kann (funktioniert mit einer leeren Form).
Dort wird per Timer eine drehende Linie gezeichnet, und wenn man auf den Button klickt, wird ein Abbild des aktuellen Bildes erstellt und vergrößert in der zweiten PictureBox gezeichnet. Hier bleibt das Bild in der 2. PictureBox auch erhalten, wenn sie z.B. minimiert und wiederhergestellt wird.
Public Class Form3
Private WithEvents picSource As New PictureBox With {.Height = 100, .Width _
= 100, .Left = 10, .Top = 10}
Private WithEvents picTarget As New PictureBox With {.Height = 150, .Width _
= 150, .Left = 120, .Top = 10}
Private WithEvents CopyButton As New Button() With {.Height = 20, .Width = _
60, .Left = 10, .Top = 120, .Text = "Copy"}
Private WithEvents Timer1 As New Timer With {.Interval = 20, .Enabled = _
True}
Private ReadOnly bmpSource As New Bitmap(100, 100, _
System.Drawing.Imaging.PixelFormat.Format32bppArgb)
Private ReadOnly bmpSourceG As Graphics = Graphics.FromImage(bmpSource)
Private bmpTarget = Nothing
Private aktWinkel As Double = 0
Public Sub New()
InitializeComponent()
bmpSourceG.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
picSource.Image = bmpSource
Controls.Add(picSource)
Controls.Add(picTarget)
Controls.Add(CopyButton)
End Sub
Private Sub Timer1_Tick(sender As Object, e As System.EventArgs) Handles _
Timer1.Tick
' Winkel erhöhen
aktWinkel += 0.02
bmpSourceG.Clear(Color.White)
bmpSourceG.DrawLine(Pens.Black, New Point(50, 50), New Point(50 + 50 * _
Math.Cos(aktWinkel), 50 + 50 * Math.Sin(aktWinkel)))
picSource.Invalidate() 'Neuzeichenn auslösen
End Sub
Private Sub CopyButton_Click(sender As Object, e As System.EventArgs) _
Handles CopyButton.Click
If bmpTarget IsNot Nothing Then bmpTarget.Dispose()
bmpTarget = New Bitmap(bmpSource)
picTarget.Invalidate()
End Sub
Private Sub picTarget_Paint(sender As Object, e As _
System.Windows.Forms.PaintEventArgs) Handles picTarget.Paint
If bmpTarget IsNot Nothing Then
Dim g As Graphics = e.Graphics
g.DrawImage(bmpTarget, New Rectangle(0, 0, picTarget.Width, _
picTarget.Height))
End If
End Sub
End Class
Beitrag wurde zuletzt am 27.08.11 um 00:52:08 editiert. |