none
Наследование System.Windows.Forms.Form. Проблема с расположением дочерних контролов при изменении размеров отнаследованной формы. RRS feed

  • Вопрос

  • Описание:

    1. Есть класс Формы отнаследованый от System.Windows.Forms.Form, назовем его AForm. Форма с изменяемым размером (св-во FormBorderSytle установлено в значение Sizable) , а у всех расположенных в форме дочерних управляющих элементов так установлены св-ва Anchor, чтобы внешний вид формы подстраивался под изменения ее размера.

    2. Есть класс отнаследованный от AForm, скажем BForm. Изменение размеров BForm в дизайнере приводит к нарушению дизайна формы в объекте класса BForm (например увеличение размера BForm больше чем у AForm создает дополнительные поля вокруг дочерних элементов)

    Проблема решается, если убрать в методе InitializeComponent() класса BForm this.SuspendLayout(); и this.ResumeLayout(false); , но это по сути хак: данный метод генерируется дизайнером и любое воздействие на BForm через дизайнер приводит к пересозданию метода InitializeComponent(), который собственно и не предназначен для изменений "руками".

    Подскажите, пожалуйста, законный способ решения данной проблемы.

     

    • Перемещено Tagore Bandlamudi 1 октября 2010 г. 21:24 MSDN Forums consolidation (От:Visual C#)
    2 сентября 2010 г. 14:24

Все ответы

  • Наверно, стоит попробовать, бросить на форму А TableLayoutPanel, и в ней размещать элементы.
    3 сентября 2010 г. 3:54
    Модератор
  • Спасибо за идею, заработало. Но есть некоторые неудобства такого решения:

    1. Контролы можно расставлять только в прямоугольную сетку, что в общем случае не удобно (даже с учетом использования ColumnSpan и RowSpan)

    2. Что-то более сложное, если вообще возможно, то требует как минимум вложенных TableLayoutPanel друг в друга

    3. Не больше одного контрола в ячейку

    4. Нестандартные контролы у которых пересекаются ClientRectangle вообще таким образом не разместишь. В данной задачке у меня таких к счастью нет, но в принципе я такие использую, например две кнопки хитрой формы тесно прилепленные друг к другу и т.п.

    5. нужно руками задавать Margin, для каждого контрола, и одновременно руками же выставить размеры колонок/столбцов. Это не сложно, но ни о каком удобстве в одно движение мышки здесь речи не идет

    Так что еще раз спасибо, в конкретной задаче, стоящей передо мной это помогло, но как универсальное решение для проблемы "детей и внуков" формы это не годится

    3 сентября 2010 г. 6:14