Problem mit FlowLayoutPanel und neuzeichnen von Bildern

10/10/2007 - 07:52 von Susanne Klemm | Report spam
Hallo,

ich benutze das FlowLayoutPanel (VS2005 Prov 8.0.50727, Net 2.0.50727)
um mehrere Bilder darzustellen. Da das bei mehreren Bildern etwas dauern
kann, habe ich suspendLayout() und resumeLayout(true) verwendet. Damit
hatte ich aber das Phànomen, dass die Bilder bzw. Panels nicht neu
gezeichnet wurde, sich überlagerten und alte Bilder nicht entfernt
wurden. Dann habe ich es ohne die beiden Aufrufe probiert, mit àhnlichem
Ergebnis. Das Panel wird einfach nicht korrekt gezeichnet, wenn Panels
darauf entfernt bzw. hinzugefügt werden. Das sieht dann z.B. so aus:

http://nineinchnose.ni.funpic.de/temp.JPG

Hier ein Code-Ausschnitt, wie ich die Bilder hinzufüge bzw. vorher entferne:

//alle vorigen Bilder entfernen
foreach (Panel pan in Controls)
{
Controls.Remove(pan);
}
//neues Bild einfügen, wird mehrmals aufgerufen
Panel pan = new Panel();
pan.Padding = new Padding(5);
PictureBox pictureBox = new PictureBox();
double d1 = (double)(imgPicture.Height) / C_MAX_PICTURE_HIGH;
pictureBox.Width = (int)Math.Round(imgPicture.Width / d1, 0);
pictureBox.Height = (int)Math.Round(imgPicture.Height / d1, 0);
pictureBox.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox.BorderStyle = BorderStyle.FixedSingle;
pictureBox.Image = imgPicture;
pictureBox.Dock = DockStyle.Fill;
Label lblTitle = new Label();
lblTitle.Width = pictureBox.Width;
lblTitle.TextAlign = ContentAlignment.MiddleCenter;
lblTitle.BorderStyle = BorderStyle.FixedSingle;
lblTitle.Text = strName;
lblTitle.Dock = DockStyle.Bottom;
lblTitle.Height = 30;
pan.Height = pictureBox.Height + lblTitle.Height + 10;
pan.Width = pictureBox.Width + 10;
pan.Controls.Add(pictureBox);
pan.Controls.Add(lblTitle);
this.Controls.Add(pan);

Danke im Voraus!
Susanne
 

Lesen sie die antworten

#1 Susanne Klemm
10/10/2007 - 10:29 | Warnen spam
Susanne Klemm wrote:
Hier ein Code-Ausschnitt, wie ich die Bilder hinzufüge bzw. vorher
entferne:

//alle vorigen Bilder entfernen
foreach (Panel pan in Controls)
{
Controls.Remove(pan);
}



Das war der Übeltàter. Beim Debuggen habe ich festgestellt, dass bei
dieser For-Schleife nicht alle Controls entfernt werden. So blieben
immer alte Bilder im Panel zurück. Ich habe es jetzt so geàndert:

for (int i = Controls.Count-1; i >= 0; i--)
{
Controls.RemoveAt(i);
}

Nun funktioniert die Darstellung auch korrekt.

Ciao
Susanne

Ähnliche fragen