2013-11-07 3 views
2

У меня есть приложение WinForms, которое позволяет редактировать документы. Каждый документ состоит из глав, и каждая глава содержит коллекцию блоков RTF. Блоки RTF загружаются в PanelControl с использованием Dock = DockStyle.Top.Топ-док-контроль более 32768 пикселей

Проблема в том, что, когда общая высота главы становится слишком большой (оценка> 32768 пикселей), нижние блоки неправильно закреплены: они появляются позади друг друга. При попытке изолировать проблему я заметил, что это также происходит с более простыми элементами управления, такими как LabelControl.

Вещи я пытался методы, как Refresh(), Invalidate() и PerformLayout: они не решить эту проблему.

справка изменяет размер. После этого все элементы управления расположены правильно.

Может ли кто-нибудь помочь в решении проблемы без изменения формы?

Прилагается о simple demo-project, что иллюстрирует проблему.

screenshot

+0

'Int16.MaxValue = 32767' - возможно, основная причина? –

+0

@Martin: моя мысль точно, но это не объясняет, почему элементы управления выкладываются правильно после изменения формы. – Martin

+0

Ну, это хороший вопрос, но этот дизайн звучит как рецепт перерасхода ресурсов. Я не считаю, что Windows (ручки и т. Д.) Предназначены для размещения этого большого выделения. –

ответ

2

На мой комментарий выше (кажется, на самом деле, проблема здесь):

WinForms (и GDI в целом) часто ведет себя непредсказуемо, если кто-то пытается использовать координаты за пределами 16 битный диапазон. Старайтесь избегать этого. В диапазоне возможных проблем вещи просто не получаются вообще, OverflowExceptions при неожиданных позициях кода и т. Д.

0

Если это возможно вам принять решение изменить этот формат, я предлагаю вам принять другой подход на показ/редактирования глав документов с каким-то пагинацией или разрушения RTF блоков в меню и показывать только текущий.

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

Содержимое с размером прокрутки 2x, 3x, 5x можно использовать для пользователя. Но прокрутка контента с высотой (~ 32768), по крайней мере (с использованием хорошего монитора разрешения с максимальным окном) в оптимальном случае 32x размер окна очень неудобен.

Плюс, я считаю, что производительность пользователя уменьшится из-за трудностей с мозгом в поиске «вещей» в растущей коллекции «вещей».

+0

В идеале, это лучший способ пойти. Однако, оценивая влияние этих изменений, я действительно надеялся на более простое решение. – Martin

Смежные вопросы