Как я могу отформатировать ось в мс управления диаграммой

Я использую элемент управления ms chart и хотел бы сделать следующее: Отформатировать ось Y chartAreas[0] в определенный формат. В этом случае это должно быть число без десятичных знаков и сгруппированное (на тысячу) с точкой.

Попробовал это с: chart1.ChartAreas[0].AxisY.LabelStyle.Format = "{#.###}";

но это не дало мне правильный результат. Поэтому я попытался получить событие FormNumber и протестировал это:

if(e.ElementType == System.Windows.Forms.DataVisualization.Charting.ChartElementType.AxisLabels)// && e.SenderTag!=null)
{
    e.LocalizedValue = e.Value.ToString("#.###", _numberFormatInfo);
}

с помощью:

NumberFormatInfo _numberFormatInfo;
_numberFormatInfo = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
_numberFormatInfo.NumberGroupSeparator = ".";
_numberFormatInfo.NumberDecimalSeparator = ",";

.ToString("#,0.00", _numberFormatInfo));

Не получилось, пока нормально, если у вас есть что-то вроде этого:

decimal myDec = 123456.789;
string test = myDec.ToString("#,0.00", _numberFormatInfo));

тест выдаст 123,456,789 (независимо от настроек культуры на компьютере пользователя).

Но это, похоже, не работает на элементе управления MS карт.

Может кто-нибудь объяснить мне, как можно сделать следующее:

Отформатируйте значения Y в chartArea[0] без десятичных знаков и с точкой в ​​качестве разделителя групп. В то же время отформатируйте значения x в формате dd-MM (например, 16-10 => 16 октября), пока значение фактически Uint 20131016. Формат должен быть независимым от настроек Культуры. Надеюсь, кто-нибудь может мне помочь. С уважением,

Matthijs

1 ответ

Я получил это работает так:

chart1.ChartAreas[0].AxisY.LabelStyle.Format = "MyAxisYCustomFormat";
chart1.ChartAreas[0].AxisX.LabelStyle.Format = "MyAxisXCustomFormat";

Используя событие NumberFormat элемента управления диаграммой:

private void chart1_FormatNumber(object sender, System.Windows.Forms.DataVisualization.Charting.FormatNumberEventArgs e)
{
    if(e.ElementType == System.Windows.Forms.DataVisualization.Charting.ChartElementType.AxisLabels)
    {
        switch(e.Format)
        {
            case "MyAxisXCustomFormat":
                e.LocalizedValue = DateTime.ParseExact(e.Value.ToString(), "yyyyMMdd", null).ToString("dd-MM");
                break;
            case "MyAxisYCustomFormat":
                e.LocalizedValue = e.Value.ToString("#,###", _numberFormatInfoNLV);
                break;
            default:
                break;
        }
    }
}

все работает так, как я хотел;-)

Другие вопросы по тегам