c# - 在 C#/.NET 2.0 中控制双缓冲所有者绘制的 UserControl 的设计器外观

标签 c# .net user-controls .net-2.0

我有一个所有者描述的 UserControl,我在其中实现了双缓冲。为了使双缓冲工作而不会闪烁,我必须像这样重写 OnPaintBackground 事件:

protected override void OnPaintBackground(PaintEventArgs e)
{
    // don't even have to do anything else
}

这在运行时效果很好。问题是,当我在设计时在窗体上有一个控件实例时,它变成了一个黑洞,显示拖过它的任何窗口的轨迹(因为 OnPaintBackground 事件的覆盖也控制设计时外观)。这只是一个表面上的问题,但它在视觉上很刺耳,而且它总是导致项目的新开发人员假设出现了严重的错误。

有没有办法让这样的重写方法在设计时不被重写,或者有其他解决方案吗?

最佳答案

不幸的是,Steven Lowe 的解决方案涵盖了所有场景,尤其是当用户控件出现时。

this.DesignMode 标志非常具有欺骗性。它的唯一范围是检查直接父级是否在设计器中。

例如,如果您在设计器中有一个表单 A 和一个用户控件 B:

  • A.DesignMode 在设计器中查看时为真
  • B.DesignMode 在设计器中查看 A 时为 false,但在直接查看 B 时为 true。

解决这个问题的方法是检查一个特殊的标志(抱歉丑陋的 C++ 代码):

 if(this->DesignMode || 
    LicenseManager::UsageMode == LicenseUsageMode::Designtime) 
    return;

此变量将始终显示正确的设计 bool 值。

关于c# - 在 C#/.NET 2.0 中控制双缓冲所有者绘制的 UserControl 的设计器外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/293351/

相关文章:

C# - FtpWebRequest - 通过同一连接/登录的多个请求

.net - 可以在 ASP.NET 应用程序之外使用 HttpRuntime.Cache 吗?

android - 我可以在 Android 中创建一个包含 UI 和逻辑/代码的独立 "usercontrol"吗?

c# - MsTest与Task.ContinueWith()和Task.Wait()...?

C# 和 cXML - 最好的方法

java - 一致的跨平台 (java .Net) PseudoRandom 生成器,如果种子相同

WPF:使用 WPF UserControl 的优点/缺点是什么?

c# - 在 C# (winforms) 中本地化 UserControl 的最佳方法

c# - 如何通过 C# 反射检查一个方法是否可以作为事件的处理程序?

c# - 我怎样才能使我产生的 IEnumerable 与 PagedList 一起工作