Verweistyp, oder doch nicht?

13/05/2008 - 10:14 von Karsten Sosna | Report spam
Hallo NG,
das hàtte ich nun nicht erwartet:
\\\
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or
ControlStyles.OptimizedDoubleBuffer Or ControlStyles.UserPaint, True)
Me.UpdateStyles()
End Sub

Protected Overrides Sub OnPaintBackground(ByVal e As
System.Windows.Forms.PaintEventArgs)
'MyBase.OnPaintBackground(e)
Console.WriteLine(e.Graphics.GetHashCode)
e.Graphics.Clear(Color.White)
e.Graphics.FillRectangle(Brushes.Red, 10, 10, 100, 100)

e.Graphics.TranslateTransform(50, 50) 'Beachten!

End Sub

Protected Overrides Sub OnPaint(ByVal e As
System.Windows.Forms.PaintEventArgs)
Console.WriteLine(e.Graphics.GetHashCode)
e.Graphics.FillRectangle(Brushes.Blue, 10, 10, 100, 100)
End Sub
///
OnPaintBackground tritt bekanntlicherweise vor OnPaint ein. Das
Graphics-Objekt sollte wg. DoubleBuffer das Gleiche sein(lt. HashCode ist es
das auch). PaintEventArgs und Graphics sind Verweistypen(oder doch nicht?).
Warum wird dann die Transformation nicht übernommen?

Danke für jeden Hinweis
Gruß Scotty
 

Lesen sie die antworten

#1 Peter Fleischer
13/05/2008 - 12:15 | Warnen spam
"Karsten Sosna" schrieb im Newsbeitrag
news:uQ%

OnPaintBackground tritt bekanntlicherweise vor OnPaint ein. Das
Graphics-Objekt sollte wg. DoubleBuffer das Gleiche sein(lt. HashCode ist
es das auch). PaintEventArgs und Graphics sind Verweistypen(oder doch
nicht?). Warum wird dann die Transformation nicht übernommen?



Hi Karsten,
mit IsReference kannst du prüfen und wirst sehen, dass es in jedem Fall
Referenzvariablen sind.

Protected Overrides Sub OnPaintBackground(ByVal e As PaintEventArgs)
'MyBase.OnPaintBackground(e)
Console.WriteLine(IsReference(e))
Console.WriteLine(IsReference(e.Graphics))
Console.WriteLine(e.Graphics.GetHashCode)
e.Graphics.Clear(Color.White)
e.Graphics.FillRectangle(Brushes.Red, 10, 10, 100, 100)
e.Graphics.TranslateTransform(50, 50) 'Beachten!
End Sub

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
Console.WriteLine(IsReference(e))
Console.WriteLine(IsReference(e.Graphics))
Console.WriteLine(e.Graphics.GetHashCode)
e.Graphics.FillRectangle(Brushes.Blue, 10, 10, 100, 100)
End Sub

Da hinter dem Graphics aber unmanaged code steht und zwischen den Aufrufen
von OnPaintBackground und OnPaint weitere Zugriffe auf den unmanaged code
möglich sind, kannst du nicht davon ausgehen, dass da wirklich der alte,
vorherige, gleiche Geràtezustand vorliegt.


Viele Gruesse

Peter

Ähnliche fragen