我写了 UserControl ,其行为类似于 ContainerControl ,但完全由WindowsForms绘制(我继承自UserControl
)
我想避免在填充控件时绘制控件,因此我需要编写与BeginUpdate()
- EndUpdate()
类似的内容。
当用户绘制控件时很容易做到,但在这种情况下,我不确定如何继续操作。
答案 0 :(得分:11)
您可以使用暂停/恢复布局。 e.g。
private void BeginUpdate()
{
this.SuspendLayout();
// Do paint events
EndUpdate();
}
private void EndUpdate()
{
this.ResumeLayout();
// Raise an event if needed.
}
如果您有兴趣暂停控制及其孩子的绘画,请查看此SO问题:Suspend Control and Children Painting
答案 1 :(得分:1)
您可以覆盖OnPaint方法,只在满足某个条件时才将控制权传递回base.OnPaint()。
private bool _doPaint = true;
protected override void OnPaint(PaintEventArgs e)
{
if(_doPaint)
base.OnPaint(e);
}
然后使用Public方法或属性处理将_doPaint变量设置为适当的值。
您可能必须以类似的方式覆盖OnPaintBackground(),具体取决于您的需求。