2013-03-15 2 views
3

Если у меня есть элемент управления диаграммой с 2 ​​chartAreas, управление диаграммой по умолчанию ставит диаграмму поверх друг друга, каждая область занимает 50% от доступного размера элемента управления диаграммы ,Как изменить диаграмму управления диаграммой C# Процентные коэффициенты

Есть ли способ изменить график chartAreas, чтобы я мог сказать, что верхняя диаграмма занимает 75% площади, а нижняя диаграмма занимает 25%?

+1

Код, пожалуйста ... –

+0

@Peretz Для этой части я использую конструктор для создания диаграммы. Хотя я мог бы скопировать этот код, я не уверен, что все это будет полезно. Это всего лишь стандартная диаграмма с двумя диаграммами в ней. Не существует собственного кода, который влияет на это, просто дизайнер. Я пытаюсь понять, знает ли кто-нибудь код для этого. – Xantham

ответ

8

Итак, я в конце концов нашел его, но я не думаю, что он очень хорошо документирован. Там каждый chartArea имеет свойство ChartArea.Position. Это свойство типа ElementPosition, и содержит 4 объекта недвижимости, которые имеют отношение к этой проблеме.

Высота: Получает или задает высоту элемента диаграммы.
Ширина: Получает или задает ширину элемента диаграммы.
X: Получает или задает относительную координату X в верхнем левом углу применимого элемента диаграммы.
Y: Возвращает или задает относительную координату Y в верхнем левом углу применимого элемента диаграммы.

Когда вы копать глубже, то Height и Width свойства также указаны в относительных координатах, так что вы можете ввести только 0 - 100.

В принципе, вы должны изменить каждую высоту, и каждый Y, чтобы переместить сдвиньте их. После первоначального создания он не будет автоматически настраивать другие цифры.

Например, если я просто изменяю Height chartArea [1] на что-то меньшее, он все равно будет закреплен там, где он был ранее, что имеет смысл, оставляя перед ним много свободного места.

Если я затем увеличу Height схемы chartArea [0], он может нарисовать над chartArea [1], что мы просто изменили размер. Итак, я должен установить Y chartArea [1], чтобы переместить его вниз, чтобы он не был нарисован, и пробел исчез.

Таким образом, чтобы получить что-то похожее на то, что я спросил в этом вопросе, я поставил его:

chart1.ChartAreas[0].Position.Y = 10; 
chart1.ChartAreas[0].Position.Height = 60; 
chart1.ChartAreas[1].Position.Y = 70; 
chart1.ChartAreas[1].Position.Height = 20; 

Чтобы сделать это объяснение более ясным, я буду ссылаться на контрольную карту, что эти chartAreas являются в качестве «родителя».

Это проценты, но для этого примера предположим, что размер родителя составляет 100 пикселей.

Это устанавливает первый график начала отображения в 10 пикселей и составляет около 60 пикселей в высоту. Затем он начинает отображать вторую диаграмму с разрешением 70 пикселей и составляет около 20 пикселей в высоту.

Если эта диаграмма была 200px высотой, то пропорции были бы одинаковыми, но на самом деле пиксели были бы вдвое (поэтому установка первой области диаграммы на 60 будет составлять 120 пикселей высотой).

Я сделал это немного больше в своей реальной программе, потому что у этого есть названия, переписывающие метки осей, но я чувствовал, что эти цифры помогли объяснить это лучше.

+0

Это разрушает диаграмму, если она выполнена, пока она не видна пользователю (у меня есть диаграмма на отдельной вкладке TabPage, и она работает нормально, если вызывается * после * диаграмма представлена ​​в глазах пользователя). – Ivan

+0

Единственное адекватное место (с получением правильного результата), которое я могу найти до сих пор, это обработчик события chart_Paint (но не PrePaint/PostPaint или где-либо еще). Но при де-максимизации окна он создает видимый мусор. – Ivan

+0

Итак, мне действительно очень любопытно, как это исправить ... – Ivan

2

Вы также можете установить вторую диаграмму .Y в нижней части первой диаграммы. Таким образом вам нужно только беспокоиться о том, где находится первый график.Код выглядит примерно так:

chart1.ChartAreas[0].Position.Y = 10; 
chart1.ChartAreas[0].Position.Height = 60; 
chart1.ChartAreas[1].Position.Y = chart1.ChartAreas[0].Position.Bottom; 
chart1.ChartAreas[1].Position.Height = 20; 

Вы также можете подушечка положение .Y, конечно, в зависимости от того, как много белого пространства вы хотите между графиками. Я использовал этот подход для приложения, которое я построил, который использует несколько диаграмм, и гарантирует, что каждый график будет правильно расположен независимо от того, что сделано с отдельной диаграммой.

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