Ich habe ein seltsames Verhalten, wenn ich eine nicht rechteckige Region auf ein Windows-Formular anwende (sagen wir mal eine Ellipse). Das Problem ist, dass das Formular für einen Moment verschwindet (als wäre die Region leer), wenn die Größe anfänglich geändert wird. Es sieht aus wie ein leichtes Flackern, während der Inhalt des Desktops hinter dem Formular für einen Bruchteil der Sekunde sichtbar wird. Nach der ersten Größenänderung ist dieses Flackern nicht mehr zu beobachten.Problem beim Anwenden der Region auf ein Formular
Dies kann reproduziert werden, indem Sie einfach ein Windows Forms-Projekt erstellen und eine Ellipsenregion auf das Formular anwenden, indem Sie die Größe des Formulars als Begrenzungsrechteck für die Ellipse verwenden (auf diese Weise können Sie das Formular skalieren) seine Grenzen werden von der Region nicht vollständig "gefressen" werden.
Hinweis: Ich aktualisiere den Bereich des Formulars im OnResize-Ereignis.
Der Code, den ich verwende sieht die folgende Art und Weise:
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
GraphicsPath path = new GraphicsPath();
path.AddEllipse(new Rectangle(Point.Empty, this.Size));
this.Region = new Region(path);
}
Irgendwelche Ideen, was dieses verursachen könnte?
Schnell Follow-up:
Ich bemerkte, dass, wenn ich den gleichen Code-Schnipsel in dem OnSizeChanged Ereignisse setzte das Flimmern verschwindet oder nur selten zu geschehen scheint.
Danke!
Wäre das nicht ein enormer Aufwand, da das Paint-Ereignis mehrmals ausgelöst wird, selbst wenn das Formular nicht in der Größe geändert wird? Ich denke, Region muss nur aktualisiert werden, wenn sich die Größe des Formulars ändert, nicht bei jeder WM_PAINT-Nachricht? – WorldIntruder