我有一个自己绘制的UserControl,我实现了双缓冲。为了在没有闪烁的情况下使双缓冲工作,我必须像这样重写OnPaintBackground事件:
protected override void OnPaintBackground(PaintEventArgs e)
{
// don't even have to do anything else
}
这在运行时非常有用。问题是,当我在设计时在窗体上有一个控件实例时,它会变成一个黑洞,显示拖动它的任何窗口的轨迹(因为OnPaintBackground事件的覆盖也控制了设计时外观)。这只是一个整容问题,但它在视觉上很刺耳,它总是引导项目的新开发人员承担一些可怕的错误。
有没有办法让这样的重写方法在设计时不被覆盖,还是有其他解决方案?
答案 0 :(得分:3)
this.DesignMode标志非常具有欺骗性。它的唯一范围是检查直接父项是否在设计者中。
例如,如果您在设计器中有一个Form A和一个UserControl B:
对此的解决方案是一个要检查的特殊标志(抱歉丑陋的C ++代码):
if(this->DesignMode ||
LicenseManager::UsageMode == LicenseUsageMode::Designtime)
return;
此变量将始终显示正确的设计布尔值。
答案 1 :(得分:2)
if (this.DesignMode)
{
return; //or call base.OnPaintBackground()
}
答案 2 :(得分:2)
C#中的greggorob64
解决方案:
if (DesignMode || LicenseManager.UsageMode == LicenseUsageMode.Designtime)
{
return;
}