0

我可以做一些简单的事情:

  1. 创建一个新的 .NET 表单应用程序
  2. 将单个 RectangleShape 放到表单上
  3. 将以下内容添加到设计器代码中的 InitializeComponent 方法中

    Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or _
        ControlStyles.UserPaint Or _
        ControlStyles.DoubleBuffer, True)
    Me.UpdateStyles()
    
  4. 运行程序
  5. 调整表格大小
  6. 愤怒地看着矩形闪烁

有可能摆脱这个吗?还是 ShapeContainer 内部存在缺陷,我需要找到不同的解决方案?

4

2 回答 2

2

这是相当有缺陷的。它使用自己的窗口,该窗口覆盖在打开了 WS_EX_TRANSPARENT 样式的表单上。这种风格使它不可见,但也阻止了任何类型的双缓冲正常工作。双缓冲窗体没有效果,窗口错误。

否则,这是一种相当昂贵的绘制形状的方法。廉价且无闪烁的方法是在表单的 OnPaint() 覆盖或 Paint 事件处理程序中使用 e.Graphics.FillRectangle()。

于 2011-07-05T17:06:49.797 回答
0

我从来没有使用过ShapeContainer,但是当我做这样的自定义图形时,我会为Panel 创建一个子类,并在我的子类的构造函数中将DoubleBuffered 设置为true。

更具体的代码示例在这里

于 2011-07-05T16:43:45.160 回答