gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:14:37 27 4
gpt4 key购买 nike

我有一个所有者描述的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com