1

当我将非矩形区域应用于 Windows 窗体(比如说椭圆)时,我面临着一种奇怪的行为。问题是最初调整大小时,表单似乎消失了一会儿(好像该区域是空的)。它看起来像轻微的闪烁,而表单后面的桌面内容在几分之一秒内变得可见。第一次调整大小后,此闪烁不再可观察到。

这可以通过简单地创建一个 Windows 窗体项目并通过使用窗体的大小作为椭圆的边界矩形将椭圆区域应用于窗体来重现(这样您将能够调整窗体的大小,因此它的边框不会被该地区完全“吃掉”)。

注意:我在 OnResize 事件中更新 Form 的区域。

我正在使用的代码如下所示:

 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);
 }

有什么想法可能导致这种情况吗?

快速跟进:

我注意到,当我在 OnSizeChanged 事件中放入相同的代码片段时,闪烁消失或似乎很少发生。

谢谢!

4

2 回答 2

1

处理 Paint 事件

private void Form1_Paint(object sender, PaintEventArgs e)
{
GraphicsPath path = new GraphicsPath(); 
path.AddEllipse(new Rectangle(Point.Empty, this.Size)); 
this.Region = new Region(path); 
}
于 2009-08-19T07:11:03.177 回答
0

你在同一领域为我解决了一个大问题。

我正在使用这个:

    private void BorderedPanel_SizeChanged(object sender, EventArgs e)
    {
        this.Region = new Region(RoundedRectangle.CreatePlusOne(this.ClientRectangle, this.cornerRadius, this.RectangleCorners));
        Refresh();
    }

并且它可以正常工作而不会闪烁。所以值得一试!

于 2012-05-10T07:27:47.210 回答