У меня есть mdiparent форма, которая имеет меню и панель слева, которая включает treeview. оставшееся пространство родительской формы может включать в себя несколько окон в зависимости от пользователя, сколько он хочет открыть. На краю панели находится сплиттер [тот, у которого есть дерево, слева], которое может увеличивать или уменьшать ширину панели и тем самым увеличивать площадь для диаграммы.Измените размер нескольких дочерних форм в mdiparent автоматически, панели и mdi C#
Я попытался использовать mdilayout в обработчике события переноса сплиттера, но он не работает.
first pic http://www.imageurlhost.com/images/x6pf89yp8x4cnm1hb4x_first.png
Красная вертикальная линия является разветвитель для увеличения/уменьшения ширины панели на левой стороне. Изначально на правой стороне нет места. открытие нового дочернего окна хорошо вписывается в оставшееся пространство.
2 http://www.imageurlhost.com/images/b1pu4lztl7eel12b1ho_second.png
Splitter перемещается влево. В правой части есть пробел, дочерняя форма не изменяет размер и не вписывается в область.
3 http://www.imageurlhost.com/images/f9ep8rd4fem5aynhc9z_third.png
Splitter переехал больше левого и пространства справа продолжает расти. Если я открою еще один график, тогда 4 старых и 1 новых, всего 5 форм заполнят отлично, и поле будет использоваться. если я снова перемещу сплиттер, то снова появится пространство с правой стороны.
4 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);
который, кажется, работает хорошо. если я максимизирую/нестандартную размерную форму, размер дочерних форм соответственно изменяется.
если я использую одно и то же, для обработчиков событий сплиттера, он не работает таким же образом.
Thanks,
Я бы предположил, что чем быстрее вы будете перемещать сплиттер, тем больше места вы получите. Что-то не так с вашим кодом, мы не можем его увидеть. –
Я отредактировал сообщение! да, чем быстрее я двигаюсь, тем больше места я получаю. если я двигаюсь медленно, у меня будет меньше места. Это случайное поведение, которое я считаю, или я не понимаю логики того, почему быстрая и медленная будет вести себя по-другому. –