Unerwartetes Picturebox.Resize

21/05/2009 - 20:51 von Armin Zingler | Report spam
Hallo,

auf einer Form (Winform, FW 3.5) habe ich eine Picturebox mit

Borderstyle = 3D
SizeMode = Normal
Anchor = Top/Left
Dock = None

Im Resize-Ereignis der Picturebox weise ich ihr ein Image zu:

pic.Image = New Bitmap(pic.ClientSize.Width, pic.ClientSize.Height)

Die Zuweisung bewirkt seltsamerweise, dass rekursiv das Resize-Ereignis
ausgelöst wird. Da SizeMode=Normal verstehe ich das nicht. Gibt's noch
andere Faktoren, die das verursachen können? Alle Versuche, das Problem in
einem neuen Projekt nachzuvollziehen, sind leider gescheitert.


Debugversuch im Resize-Ereignis:

Static level As Integer
Debug.Print(level & " ClientSize vorher: " & pic.ClientSize.ToString)
level += 1
pic.Image = New Bitmap(pic.ClientSize.Width, pic.ClientSize.Height)
level -= 1
Debug.Print(level & " ClientSize nachher: " & pic.ClientSize.ToString)


Ergebnis:

0 ClientSize vorher: {Width08, Height 4}
1 ClientSize vorher: {Width–, HeightF}
1 ClientSize nachher: {Width–, HeightF}
0 ClientSize nachher: {Width–, HeightF}


Der Callstack beim zweiten Resize ist:


MainForm.pic_Resize(...)


System.Windows.Forms.Control.OnResize()
System.Windows.Forms.PictureBox.OnResize()
System.Windows.Forms.Control.OnSizeChanged({System.EventArgs})
System.Windows.Forms.Control.UpdateBounds()
System.Windows.Forms.Control.UpdateBounds()
System.Windows.Forms.Control.SetBoundsCore(Width | Height)
System.Windows.Forms.Control.SetBounds()
System.Windows.Forms.Control.Size.set()
System.Windows.Forms.PictureBox.AdjustSize()
System.Windows.Forms.PictureBox.InstallNewImage(DirectlySpecified)
System.Windows.Forms.PictureBox.Image.set()
MainForm.pic_Resize(...)


Wie kommt er denn auf die Maße 100;50 (bzw 96;46 Clientbereich)?

Habe das Projekt gerade von VB 2003 portiert. Dort verhàlt es sich nicht so,
d.h. die Picturebox hat auch nach dem Start ihre ursprüngliche, im Designer
eingestellte Größe.



Armin
 

Lesen sie die antworten

#1 Armin Zingler
22/05/2009 - 00:16 | Warnen spam
Armin Zingler wrote:
Der Callstack beim zweiten Resize ist:

MainForm.pic_Resize(...)


System.Windows.Forms.Control.OnResize()
System.Windows.Forms.PictureBox.OnResize()
System.Windows.Forms.Control.OnSizeChanged({System.EventArgs})
System.Windows.Forms.Control.UpdateBounds()
System.Windows.Forms.Control.UpdateBounds()
System.Windows.Forms.Control.SetBoundsCore(Width | Height)
System.Windows.Forms.Control.SetBounds()
System.Windows.Forms.Control.Size.set()
System.Windows.Forms.PictureBox.AdjustSize()
System.Windows.Forms.PictureBox.InstallNewImage(DirectlySpecified)
System.Windows.Forms.PictureBox.Image.set()
MainForm.pic_Resize(...)




Aktueller Zwischenstand:

In PictureBox.AdjustSize wird die zu setzende Größe aus dem privaten Feld
'savedSize' geholt. Im funktionierenden Testprojekt ist das dieselbe wie im
Designer angegeben (312; 208). Im eigentlich Projekt enthàlt das Feld
100;50.


Daraufhin habe ich mir beim ersten Auftreten des Resize-Ereignisses folgende
Werte anzeigen lassen:

Size savedSize
Testprojekt: 312;208 312;208
eigentliches Projekt: 312;208 100;50

Warum die Werte im eigentlichen Projekt unterschiedlich sind, ist mir noch
schleierhaft. Ich suche


Armin


Weiß das wirklich niemand?
http://groups.google.com/group/micr...9cf2f2eadb
http://groups.google.com/group/micr...430b1aa99f

Ähnliche fragen