C# 将区域应用于窗体时出现的问题
当我将非矩形区域应用于Windows窗体(比如椭圆)时,我面临一种奇怪的行为。问题是,在最初调整大小时,表单似乎消失了一段时间(好像区域是空的)。它看起来像是一个轻微的闪烁,而表单后面的桌面内容在几秒钟内变得可见。第一次调整大小后,此闪烁不再可见 只需创建一个Windows窗体项目,并将窗体大小用作椭圆的边界矩形,将椭圆区域应用于窗体,就可以重现此效果(通过这种方式,您可以调整窗体大小,因此其边框不会完全被区域“吃掉”) 注意:我正在OnResize事件中更新表单的区域 我使用的代码如下所示:C# 将区域应用于窗体时出现的问题,c#,winforms,forms,region,C#,Winforms,Forms,Region,当我将非矩形区域应用于Windows窗体(比如椭圆)时,我面临一种奇怪的行为。问题是,在最初调整大小时,表单似乎消失了一段时间(好像区域是空的)。它看起来像是一个轻微的闪烁,而表单后面的桌面内容在几秒钟内变得可见。第一次调整大小后,此闪烁不再可见 只需创建一个Windows窗体项目,并将窗体大小用作椭圆的边界矩形,将椭圆区域应用于窗体,就可以重现此效果(通过这种方式,您可以调整窗体大小,因此其边框不会完全被区域“吃掉”) 注意:我正在OnResize事件中更新表单的区域 我使用的代码如下所示:
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事件中放入相同的代码片段时,闪烁消失或似乎很少发生
谢谢 处理绘制事件
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);
}
处理绘制事件
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);
}
你在同一地区为我解决了一个大问题 我用这个:
private void BorderedPanel_SizeChanged(object sender, EventArgs e)
{
this.Region = new Region(RoundedRectangle.CreatePlusOne(this.ClientRectangle, this.cornerRadius, this.RectangleCorners));
Refresh();
}
而且它不会闪烁。所以值得一试 你在同一领域为我解决了一个大问题 我用这个:
private void BorderedPanel_SizeChanged(object sender, EventArgs e)
{
this.Region = new Region(RoundedRectangle.CreatePlusOne(this.ClientRectangle, this.cornerRadius, this.RectangleCorners));
Refresh();
}
而且它不会闪烁。所以值得一试 这难道不是一个巨大的开销,因为即使表单没有调整大小,绘制事件也会被多次触发吗?我猜只有当表单的大小改变时才需要更新区域,而不是在每个WM_PAINT消息上?这不是一个巨大的开销吗?因为即使表单没有调整大小,也会多次触发PAINT事件?我猜只有当表单的大小改变时,才需要更新区域,而不是在每个WM_PAINT消息上?