Ich habe die wichtigsten Themen zu dem Flackern eines Controls durchgelesen und schon alles durchprobiert, aber ich bekomme eine PictureBox nicht ohne Flackern vergrößert bzw. verkleinert.
Die PictureBox ist in einem Panel, beinhaltet ein Bild und SizeMode ist auf Zoom eingestellt. Die Größe wird über eine TrackBar mit diesem Code verändert:
private void trackBar1_ValueChanged(object sender, EventArgs e)
{
pictureBox.SuspendLayout();
int TempVar = 0;
TempVar = trackBar1.Value - pictureBox.Height;
if (TempVar < 0)
{
TempVar = TempVar * -1;
if ((pictureBox.Width - TempVar) >= 50)
{
pictureBox.Size = new System.Drawing.Size(pictureBox.Width - TempVar, trackBar1.Value);
pictureBox.Location = new System.Drawing.Point((int)Math.Round(pictureBox.Location.X + TempVar / 2f), (int)Math.Round(pictureBox.Location.Y + TempVar / 2f)); //--- Position des Vorschaubildes
}
else
return;
}
else
{
pictureBox.Size = new System.Drawing.Size(pictureBox.Width + TempVar, trackBar1.Value);
pictureBox.Location = new System.Drawing.Point((int)Math.Round(pictureBox.Location.X - TempVar / 2f), (int)Math.Round(pictureBox.Location.Y - TempVar / 2f)); //--- Position des Vorschaubildes
}
pictureBox.ResumeLayout();
}
Könnt ihr mir noch ein paar Tipps geben? Es flackert wenn die Ränder des Bildes zu sehen sind. Also wenn das Bild relativ klein ist.
Danke im Voraus.
Hallo el_vital,
und du bist dir ganz sicher, dass DoubleBuffered der PictureBox eingeschaltet ist?
herbivore
Hallo herbivore,
ich habe die PictureBox dafür extra abgeleitet:
class myPictureBox : PictureBox
{
public myPictureBox()
{
this.SetStyle(
ControlStyles.AllPaintingInWmPaint |
ControlStyles.UserPaint |
ControlStyles.DoubleBuffer, true);
}
}
Oder ist es so falsch?
oh, ich habe gerade eine Lösung gefunden. Wenn ich die pictureBox in eine weitere Picturebox anstatt eines Panels packe, dann gibt es diese Probleme nicht. Schade, dass eine Picturebox nicht in dem Designer Child-Elemente aufnehmen kann.
Nachtrag: das geht auch mit einem Panel. Also Panel ableiten, DoubleBuffer Style zuweisen und dieses Panel als Untergrund verwenden.