Автоматическое изменение размера нескольких дочерних форм в mdiparent, панелях и mdi C#

У меня есть форма mdiparent с меню и панелью слева, которая включает в себя древовидную структуру. оставшееся пространство родительской формы может включать в себя несколько окон в зависимости от того, сколько пользователь хочет ее открыть. На краю панели есть разделитель [тот, что с древовидным представлением, слева], который может увеличивать или уменьшать ширину панели и тем самым увеличивать область для диаграммы.

Я попытался использовать mdilayout в обработчике события перемещения разделителя, но это не сработало.

http://www.imageurlhost.com/images/x6pf89yp8x4cnm1hb4x_first.png

Красная вертикальная линия — это разделитель для увеличения/уменьшения ширины панели слева. Изначально справа места нет. открытие нового дочернего окна хорошо вписывается в оставшееся пространство.

http://www.imageurlhost.com/images/b1pu4lztl7eel12b1ho_second.png

Сплиттер переместился влево. Справа есть пробел, дочерняя форма не изменяет размер и не вписывается в область.

http://www.imageurlhost.com/images/f9ep8rd4fem5aynhc9z_Third.png

Разделитель сместился больше влево, а пространство справа продолжает увеличиваться. Если я открою еще один график, то 4 старых и 1 новый, всего 5 форм идеально впишутся, и пространство будет использовано. если я снова передвину сплиттер, то снова появится пространство с правой стороны.

http://www.imageurlhost.com/images/e3fup4nrfb7aj7d13e5_four.png

Как я могу сделать так, чтобы все дочерние формы точно соответствовали оставшемуся пространству при каждом перемещении разделителя?

Код в обработчике событий Splitter move/mouseup.

    this.LayoutMdi(MdiLayout.TileHorizontal);       

Дочерние формы [окна графа] имеют

    this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;

Родительская форма [которая на картинке]

    this.leftpanel.Dock = System.Windows.Forms.DockStyle.Left;
    this.leftpanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
    this.AutoSize = true;

Если размер родительской формы изменен, то обработчик события изменения размера также активируется.

    this.LayoutMdi(MdiLayout.TileHorizontal);

который, кажется, работает хорошо. если я максимизирую / нестандартный размер родительской формы, дочерние формы соответственно изменяют размер.

если я использую то же самое для обработчиков событий сплиттера, это не работает таким же образом.

Спасибо,


person saumil patel    schedule 12.06.2013    source источник
comment
Я предполагаю, что чем быстрее вы переместите сплиттер, тем больше места вы получите. Что-то не так с вашим кодом, мы его не видим.   -  person Hans Passant    schedule 12.06.2013
comment
Я отредактировал пост! да, чем быстрее я двигаюсь, тем больше места получаю. если я буду двигаться медленно, я получу меньше места. Я верю, что это случайное поведение, или я не понимаю логики того, почему быстрые и медленные будут вести себя по-разному.   -  person saumil patel    schedule 13.06.2013


Ответы (1)


Пробовали что-то подобное?

Form.Anchor = AnchorStyles.Left | AnchorStyles.Top;
person Nick Garfitt    schedule 12.06.2013
comment
Извините: / без понятия, используете ли вы SplitContainerControl или Splitter - person Nick Garfitt; 12.06.2013
comment
просто сплиттер, я мог бы использовать SplitContainerControl. Он может служить цели. Но для этого мне придется добавить все дочерние формы в панель. Это может вызвать проблемы с производительностью в моем приложении. Поскольку я не знаю, сколько дочерних окон сможет обрабатывать панель. - person saumil patel; 12.06.2013
comment
Ну, честно говоря, это стоит того, чтобы хотя бы попробовать :) - person Nick Garfitt; 12.06.2013
comment
Это не работает. Я пробовал. Я назвал stackoverflow.com/questions/4230486/ и stackoverflow.com/questions/4571843/panel-and-mdi-in-c-sharp/ - person saumil patel; 12.06.2013
comment
да, к сожалению, не получилось. логика компоновки отлично работает в обработчике событий изменения размера формы. он должен работать в обработчике событий сплиттера. так расстраивает! - person saumil patel; 13.06.2013