DockStyle Fill для элементов управления, генерируемых RunTime - PullRequest
6 голосов
/ 07 марта 2012

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

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

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

EDIT: Забыл упомянуть, что вызов «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);

Ответы [ 6 ]

4 голосов
/ 07 марта 2012

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

Вы не можете настроить его z-index, пока вкладка не будет отображена.

2 голосов
/ 07 марта 2012

Не состыковывай. Прикрепите это вместо:

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

Edit:

как указал Джон, призывая:

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

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

1 голос
/ 28 октября 2015

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

1 голос
/ 25 августа 2015

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

1 голос
/ 09 июля 2013

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

0 голосов
/ 29 сентября 2017

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

...