Hallo,
ich habe auf ein Formular, eine Picturebox. In diese wird ein Bild geladen und kann dann verändert werden. Prinzipiell habe ich es so gelöst
Protected Friend WriteOnly Property Picture As Image
Set(ByVal value As Image)
OrginalPic = CType(value.Clone, Image)
MyPic = value
picBild.Invalidate()
End Set
End Property
Private OrginalPic As Image = Nothing 'Das orginale Bild
Private MyPic As Image = Nothing 'Das geänderte Bild
Private Sub ÄndereBild
Dim Bmp as new Bitmap(MyPic)
'hier wird nun Bmp verändert
myPic=bmp
picBild.Invalidate() 'PicBild ist die PictureBox
End Sub
Private Sub picBild\_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles picBild.Paint
If MyPic Is Nothing Then Exit Sub
e.Graphics.DrawImage(MyPic, picBild.ClientRectangle)
End Sub
Es sei angemerkt das der Style von der Picturebox auf Strecht gestellt ist!
Nun möchte ich aber einen Bereich des Bildes makieren, mittels einer Rubberbox. Dazu verwende ich folgenden Source
Private RubberboxVisible As Boolean = False
Private pRubberBox As Point
Private sRubberBox As Size
Private Sub picBild\_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles picBild.MouseDown
RubberboxVisible = True
pRubberBox = New Point(Control.MousePosition.X, Control.MousePosition.Y)
sRubberBox = New Size(0, 0)
ControlPaint.DrawReversibleFrame(New Rectangle(pRubberBox, sRubberBox), Color.White, FrameStyle.Dashed)
End Sub
Private Sub picBild\_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles picBild.MouseMove
If e.Button = MouseButtons.Left Then
If RubberboxVisible Then ControlPaint.DrawReversibleFrame(New Rectangle(pRubberBox, sRubberBox), Color.White, FrameStyle.Dashed)
sRubberBox = New Size(Control.MousePosition.X - pRubberBox.X, Control.MousePosition.Y - pRubberBox.Y)
ControlPaint.DrawReversibleFrame(New Rectangle(pRubberBox, sRubberBox), Color.White, FrameStyle.Dashed)
End If
End Sub
Das Event MouseUp wurde noch nicht implementiert. Es soll mir halt erst einmal die Rubberbox anzeigen. Er macht dies auch soweit. Ich kann nach belieben, eine Rubberbox aufziehen. Das Flag RubberboxVisible soll mir nur sagen ob eine Rubberbox angezeigt wird oder nicht.
Wenn ich aber nun die Picturebox mit einem anderen Fenster kurz überdecke oder das Formular verschiebe, so das das Paint Ereignis erneut aufgerufen wird, verschwindet nun aber die Rubberbox.
Folgende versuche habe ich bereits unternommen.
*Das Flag RubberboxVisible abgefragt auf True und ggfls. die Rubberbox neu gezeichnet -> Kein Erfolg!
*Das Flag RubberboxVisible auf True abgefragt und die Rubberbox 2 mal neu gezeichnet, da beim überzeichnen sie ja gelöscht wird -> Kein Erfolg
Hat noch jemand eine Idee, was ich noch machen könnte?
MfG Alex