Пользовательские метки полярной диаграммы MSchart не работают - PullRequest
0 голосов
/ 05 сентября 2018

По умолчанию углы на диаграмме полярности идут от 0 до 360 по часовой стрелке, но я хочу, чтобы они шли против часовой стрелки (против часовой стрелки)

chart.ChartAreas[0].AxisX.Title = "Elevation";
chart.ChartAreas[0].AxisY.Title = "Power(dBm)";
chart.ChartAreas[0].BackColor = System.Drawing.Color.FromArgb(211, 223, 240);
chart.ChartAreas[0].BorderColor = System.Drawing.Color.FromArgb(26, 59, 105);
chart.ChartAreas[0].AxisY.IsStartedFromZero = false;
chart.PrePaint += new EventHandler<ChartPaintEventArgs>(chart_prePaint);

Я попытался изменить метки для некоторого примера кода, который я нашел следующим образом:

CustomLabelsCollection labels = chart.ChartAreas[0].AxisX.CustomLabels;

if (labels == null) return;

for (int i = 0; i < labels.Count - 1; i++)
{
    if (labels[0].Text == "360") break;
    labels[i].Text = (360 - int.Parse(labels[i].Text)).ToString();
    labels[i].ToolTip = "Angle in Degrees";
}

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

Чтобы добавить путаницу, я не уверен, почему объект CustomLabels заполняется в первую очередь - я не делал этого.

Есть идеи, почему изменения не имеют никакого эффекта?

Заранее спасибо!

1 Ответ

0 голосов
/ 04 октября 2018

Если вы хотите что-то вроде этого: ..

enter image description here

.. CustomLabels действительно способ достичь этого. Я не мог найти способ заставить ось повернуть вспять ...

Вот код C #, который я использовал:

Axis ay = chart.ChartAreas[0].AxisY;
ay.LabelStyle.Enabled = false;

Axis ax = chart.ChartAreas[0].AxisX;
ax.CustomLabels.Clear();

int  step = (int)ax.Interval;
if (step == 0) step = 30;

for (int i = 0; i < 360; i+=step)
{
    int a = 360 - i;             // the angle to target
    var cl = new CustomLabel();
    cl.Text = a + "°";
    cl.FromPosition = a + 0.01;  // create a small..
    cl.ToPosition = a - 0.01;    // ..space to place the label !
    ax.CustomLabels.Add(cl);
}

Обратите внимание, что только Labels реверсированы, не значения !

Чтобы начать с 0, просто измените условие цикла на <= и проверьте наличие i>0 перед созданием меток!

Если вы не установили Interval, я использую интервал по умолчанию 30; при необходимости измените!


По умолчанию CustomLabels коллекция создана , поэтому она не null, а пусто (Count==0). Если вы ничего не создали, то их нет, и отображается исходное AxisLabels. (Будет показан только один тип!)

Если у вас нет действительно веской причины, такой как очень динамические данные, вы не должны добавлять или изменять что-либо в событии xxxPaint! Они могут быть вызваны довольно часто, и эти события действительно только для рисования. ((А иногда и для измерения))

...