| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка 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 и всё равно перерисует себя полностью? OnPain всё время меняю и дописываю сейчас, пока работает приемлемо, но надо ещё много чего прикрутить, а работает всё как-то медленнее и медленнее, в общем сначала допишу, потом буду оптимизировать) |