2013-06-12 2 views
0

У меня есть 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,

+0

Я бы предположил, что чем быстрее вы будете перемещать сплиттер, тем больше места вы получите. Что-то не так с вашим кодом, мы не можем его увидеть. –

+0

Я отредактировал сообщение! да, чем быстрее я двигаюсь, тем больше места я получаю. если я двигаюсь медленно, у меня будет меньше места. Это случайное поведение, которое я считаю, или я не понимаю логики того, почему быстрая и медленная будет вести себя по-другому. –

ответ

0

Пробовал что-то вроде этого?

Form.Anchor = AnchorStyles.Left | AnchorStyles.Top; 
+0

Да, я уже пробовал, это не сработало!: | –

+0

Извините, что:/no clue Вы используете SplitContainerControl или Splitter –

+0

просто сплиттер, я мог бы использовать SplitContainerControl.It может служить цели. Но для этого мне придется добавить все дочерние формы в панель. Это может вызвать проблемы с производительностью в моем приложении. Поскольку, я не знаю, сколько дочерних окон панель сможет обрабатывать. –

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

  • Нет связанных вопросов^_^