用户控件的BeginUpdate()EndUpdate

时间:2011-02-14 15:39:52

标签: c# .net winforms user-controls paint

我写了 UserControl ,其行为类似于 ContainerControl ,但完全由WindowsForms绘制(我继承自UserControl

我想避免在填充控件时绘制控件,因此我需要编写与BeginUpdate() - EndUpdate()类似的内容。

当用户绘制控件时很容易做到,但在这种情况下,我不确定如何继续操作。

2 个答案:

答案 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(),具体取决于您的需求。