Каков порядок отрисовки (событие OnPaint / OnPaintBackground) в дочерних родительских элементах управления? - PullRequest
2 голосов
/ 19 декабря 2008

Использование C # .NET Compact Framework Я создаю элемент управления с графическим интерфейсом, который содержит и контролирует дочерние элементы, которые также являются пользовательскими элементами управления (то есть System.Windows.Forms.UserControl). И дети, и родители имеют собственные процедуры рисования (OnPaint). Чтобы лучше понять и оптимизировать процедуры рисования, я бы хотел уточнить порядок рисования в .NET.

(1) Каков будет правильный порядок следующих событий, когда все это отображается в первый раз:

  • parent.OnPaintBackground

  • child.OnPaintBackground

  • parent.OnPaint

  • child.OnPaint

(2) Влияет ли порядок вызовов Control.Invalidate () на порядок событий OnPaint / OnPaintBackground?

(3) Если дочерний элемент управления вызывает своего собственного child.Invalidate (), родитель также получает событие OnPaint / OnPaintBackground?

(4) Как система определяет, какой контроль является родительским для каких детей и наоборот? Является ли Control.Parent единственным признаком этого отношения?

1 Ответ

1 голос
/ 19 декабря 2008

На самом деле это не ответ, но вы можете использовать некоторые операторы Debug.Print() и написать быструю программу для самостоятельного тестирования 1-3. Добавьте подписчиков на интересующие вас события и посмотрите, когда они происходят. Затем сделайте то, что вы предлагаете в 2-3 и измените порядок вызовов Invalidate() и наблюдайте.

Как я уже сказал, не ответ, но, безусловно, способ найти ответ.

Что касается # 4, то, как вы намекаете, отношения двусторонние. У вас уже есть половина отношений с Control.Parent (child-> parent). Другая половина - коллекция Control.Controls (parent-> children). Исходя из того, как я понимаю, представьте себе отношения как большое неупорядоченное дерево.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...