BeginUpdate () EndUpdate для UserControl - PullRequest
8 голосов
/ 14 февраля 2011

Я написал UserControl , который ведет себя как ContainerControl , но полностью окрашен WindowsForms (я наследую от UserControl)

Я бы хотел не рисовать элемент управления во время его заполнения, поэтому мне нужно написать что-то похожее на BeginUpdate() - EndUpdate().

Это легко сделать, когда элемент управления нарисован пользователем, но в этом случае я не уверен, что делать дальше.

Ответы [ 2 ]

11 голосов
/ 14 февраля 2011

Вы можете использовать макет Suspend / Resume. например,

private void BeginUpdate()
{
  this.SuspendLayout();
  // Do paint events
  EndUpdate();
}

private void EndUpdate()
{
   this.ResumeLayout();
   // Raise an event if needed.
}

Если вы заинтересованы в приостановке рисования элемента управления и его дочерних элементов, проверьте этот вопрос SO: Контроль приостановки и дочерняя живопись

1 голос
/ 14 февраля 2011

Вы можете переопределить метод OnPaint и передавать управление обратно только в base.OnPaint () при выполнении определенного условия.

    private bool _doPaint = true;
    protected override void OnPaint(PaintEventArgs e)
    {
        if(_doPaint)
            base.OnPaint(e);
    }

Затем обработайте установку переменной _doPaint на соответствующее значение с помощью методов Public или свойства.

Возможно, вам придется переопределить OnPaintBackground () аналогичным образом, в зависимости от ваших потребностей.

...