Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Бесконтрольная перерисовка дочернего mdi окна


Автор: GenkaRu 21.4.2010, 21:03
 Вопрос скорее общий, помогите пожалуйста, кто знает, ситуация такая: Есть главная mdi форма, у неё есть 2 дочерних окна, и в главной форме размещён split container, а к нему уже привязаны эти дочерние окна, к первой и второй его панелям соответственно. 

 В правом дочернем отрисовка объектов, в левом - информация о них, и переключатели что рисовать, в виде листбоксов и комбобоксов.

 Проблема в том, что стоит сделать что угодно, как то повести мышкой над левой панелью, или над комбобоксом, или поменять выбранный элемент, или нарисовать что-то в правой панели, или не дай бог вызвать инвалидейт у какого-то элемента - вызывается шквал перерисовок всего и вся начиная с главного окна. Если, скажем,  поставить брейкпойнт на On_Paint левой панели, где куча комбобксов, то в дебаггере видно, что это событие вызывается снова и снова, может быть по числу элементов в панели, в том числе многократно вызывается On_Paint для правой панели, где вообще ничего не менялось. 

 Кто знает как это дебажить, как с этим бороться? Эта пакость - особенность сплит контейнера? Подскажите пожалуйста. Возможно у меня в ОнПэйнтах много лишнего, например там каждый раз заполняются комбобоксы и списки, это очень быдлокод? Заранее спасибо.


Автор: ZmeyNet 21.4.2010, 21:30
GenkaRu,  то что onpaint дергается часто - нормально. То что ваша логика не связанная именно с отрисовкой там находится - не нормально 

Цитата

Возможно у меня в ОнПэйнтах много лишнего, например там каждый раз заполняются комбобоксы и списки, это очень быдлокод? 

очень 
списки должны быть заполнены ДО отрисовки, а так получается только мы отрисовали 1 айтем и тут его обновили , он дергает ОNChange ,а тот опять просит себя перерисовать...

Автор: Heinzz 22.4.2010, 17:03
OnPaint в студию

Автор: GenkaRu 24.4.2010, 12:57
Спасибо, не получится до отрисовки, я рисую объекты в окне, и они добавляются в список, точнее теперь это уже таблица, но обновление итемов из пейнта я убрал!

 Вот OnChange беспокоит, что же, получается если вызвать у контрола invalidate(Rect), он обновит только этот самый рект, а потом поймёт, что его изменили, выбросит OnChangе, который позовёт OnPaint и всё равно перерисует себя полностью?  smile 

OnPain всё время меняю и дописываю сейчас, пока работает приемлемо, но надо ещё много чего прикрутить, а работает всё как-то медленнее и медленнее, в общем сначала допишу, потом буду оптимизировать)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)