2012-03-06 3 views
6

Я пытаюсь сделать что-то очень простое, что дает мне огромные проблемы в C# Winforms. У меня есть две групповые поля в TabPage. Один состыковал правый и один состыкованный дно. У меня также есть диаграмма на странице (System.Windows.Forms.DataVisualization.Charting). Этот график предназначен для Dock.Fill оставшееся место на странице.DockStyle Fill for RunTime Сгенерированные элементы управления

Сначала я столкнулся с проблемой диаграммы, скрывающейся за обеими групповыми ящиками, и док-станцией, заполняющей всю страницу. Тем не менее, я обнаружил, что могу решить эту проблему, используя «BringToFront» (или переупорядочивая порядок структуры документа), а затем диаграмма состыковалась должным образом и не перекрывала никаких других элементов управления на странице.

Тем не менее, я пытаюсь добавить диаграмму на странице во время выполнения, и она снова заполняет всю страницу и скрывается за другими элементами управления. Как я могу заняться этой работой?

РЕДАКТИРОВАТЬ: Вспомним, что вызов «BringToFront» вызовет исключение «Ширина должна быть больше 0px».

chart_TapChart = new Chart(); 
chart_TapChart.Dock = DockStyle.Fill; 
chart_TapChart.BringToFront(); 
GroupBox gp1 = new GroupBox(); 
gp1.Dock = DockStyle.Right; 
GroupBox gp2 = new GroupBox(); 
gp2.Dock = DockStyle.Bottom; 
this.Controls.Add(chart_TapChart); <--this refers to tabpage 
this.Controls.Add(gp1); 
this.Controls.Add(gp2); 
+0

Можете ли вы разместить код? –

+0

Это суть кода. Буквально простой и простой материал. Этот код содержится в TabPage. TabPage добавляется в TabController. – ImGreg

+0

http://msdn.microsoft.com/en-us/library/ms404360 (v = vs.80) .aspx Дает хороший совет ... – Andrew

ответ

4

Оказывается, вам нужно подождать, пока TabPage уже будет просмотрен (вам необходимо запрограммировать вызов yourtabpage.select()), затем выполнить поиск с помощью элементов управления на этой вкладке, найти диаграмму и вызвать «BringToFront» на Это. У вас может быть установлен Dock.Fill перед добавлением элемента управления на страницу.

Вы не можете настроить свой индекс z до тех пор, пока не будет отображена закладка.

+0

Просто была аналогичная проблема. Панель, программно настроенная на DockStyle.Fill в TabPage не ведет себя так, как предполагалось, если DockStyle не установлен после того, как TabPage установлен как свойство SelectedTab в TabControl. – Gareth

2

Не стыкуйте его. Якорь его вместо:

Chart.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Top; 

Edit:

, как Джон указал телефон:

Chart.BringToFront(); 
Chart.Dock = DockStyle.Fill; 

Если позволить док играть хорошо с другими элементами управления на форме.

+0

Я пробовал это, он не заполняет пустое пространство, как я этого хочу. Dock.Fill будет гораздо более идеальным. – ImGreg

+0

Dock.Fill не будет работать, потому что он всегда будет заполнять свой родительский contianer и перекрывать другие элементы управления. Установите левую, верхнюю, ширину и высоту в пространство, которое вы хотите использовать, а затем привяжите его. – Coltech

+1

Coltech - Dock.Fill может играть хорошо с другими элементами управления, закрепленными сверху/снизу/влево/вправо. Z-порядок определяет, как это работает. Если диаграмма сверху, она не заполняет весь контейнер. –

1

У меня была аналогичная проблема с элементом управления диаграммой, где он разбился, если высота была установлена ​​равной нулю. Сообщение об ошибке было «height должно быть больше 0px». Изменив док-станцию ​​от Fill до None и установив свойства привязки, вместо этого зафиксируйте ее. Похож на ошибку в контроле диаграммы, но поиск какой-либо дополнительной информации затрудняется ...

1

У нас были проблемы с «высотой должно быть больше 0px». Оказывается, проблема/решение - это настройки дисплея. Установка размера экрана на что-либо более 100% привела к созданию DockStyle. Заполнение определенных элементов, заполняющих все доступное пространство, оставляя диаграмму с высотой 0px при инициализации. Установка якорей вместо использования Fill работала над проблемой, но это действительно ошибка в управлении диаграммой.

1

Я смог решить эту проблему и сохранить настройки док-станции, установив минимальный размер графика на 10,10.

0

Установка Dockstyle None позволяет загрузить форму, но мне действительно нужно использовать стиль стыковки Fill для некоторых моих диаграмм. Я решил эту проблему, установив myChart.Dock = DockStyle.None в конструкторе, а затем установил myChart.Dock = DockStyle.None в конце события Form.Load в коде. Теперь программа загружается без ошибок, и диаграммы имеют правильный размер.

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