C# UserControl的BeginUpdate()EndUpdate
我编写了一个用户控件,其行为类似于容器控件,但完全由WindowsForms绘制(我继承自C# UserControl的BeginUpdate()EndUpdate,c#,.net,winforms,user-controls,paint,C#,.net,Winforms,User Controls,Paint,我编写了一个用户控件,其行为类似于容器控件,但完全由WindowsForms绘制(我继承自用户控件) 我希望在填充控件时避免绘制控件,因此我需要编写类似于BeginUpdate()-EndUpdate()的内容 当控件由用户绘制时,这很容易做到,但在这种情况下,我不确定如何继续。您可以使用暂停/恢复布局。e、 g private void BeginUpdate() { this.SuspendLayout(); // Do paint events EndUpdate(); }
用户控件
)
我希望在填充控件时避免绘制控件,因此我需要编写类似于BeginUpdate()
-EndUpdate()
的内容
当控件由用户绘制时,这很容易做到,但在这种情况下,我不确定如何继续。您可以使用暂停/恢复布局。e、 g
private void BeginUpdate()
{
this.SuspendLayout();
// Do paint events
EndUpdate();
}
private void EndUpdate()
{
this.ResumeLayout();
// Raise an event if needed.
}
如果您对暂停控件及其子控件的绘制感兴趣,请查看以下问题:您可以重写OnPaint方法,并仅在满足特定条件时将控件传递回base.OnPaint()
private bool _doPaint = true;
protected override void OnPaint(PaintEventArgs e)
{
if(_doPaint)
base.OnPaint(e);
}
然后使用公共方法或属性将_doPaint变量设置为适当的值
根据需要,您可能必须以类似的方式重写OnPaintBackground()。据我所知,SuspendLayout不一定会停止控件的绘制。它在诸如FlowLayoutPanel之类的容器上非常有用,FlowLayoutPanel对其子级执行布局操作。它将用于避免在每次向面板添加控件(例如在循环中)时执行布局操作。我可能错了,但是如果你有更多的信息,我希望你能提供。我选择了这个方法。由于我的控件是供其他开发人员使用的,因此我还添加了一个安全计时器,该计时器在1500毫秒后重新启用
\u doPaint
1500毫秒,以防他们的代码无法正确打开它。