【问题标题】:.NET PowerPacks RectangleShape flickers on form resize.NET PowerPacks RectangleShape 在表单调整大小时闪烁
【发布时间】:2011-07-05 16:39:11
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: .net gdi+ powerpacks


    【解决方案1】:

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

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

    【讨论】:

    • 好吧,自己测试一下——但我发现双缓冲表单时有很大的不同。它仍然以双缓冲形式闪烁,但如果你按照我的步骤 - 在运行之间切换双缓冲 - 你应该注意到它。除此之外,感谢您确认该工具存在缺陷。我会使用你的建议。
    【解决方案2】:

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

    更具体的代码示例here

    【讨论】:

    • 是的,遗憾的是 ShapeContainer 类是不可继承的。这也是我的第一次尝试:Previous question
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 2014-12-29
    • 2019-01-05
    相关资源
    最近更新 更多