如何在ms图表控件中格式化轴

时间:2013-10-16 10:31:05

标签: c# format axis mschart invariantculture

我正在使用ms图表控件,并希望执行以下操作: 将chartAreas [0]的Y轴格式化为特定格式。在这种情况下,它应该是一个没有小数的数字,并用一个点分组(每千)。

尝试: 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));

test将返回123.456,789(独立于用户计算机上的Culture设置)。

但这似乎不适用于ms图表控件。

有人可以向我解释如何能够执行以下操作:

格式化chartArea [0]中的Y值,不带小数,并将点作为组分隔符。同时将x值格式化为dd-MM格式(如16-10 => 10月16日)虽然该值实际上是Uint 20131016。 格式必须是独立的文化设置。 希望有人可以帮助我。 亲切的问候,

Matthijs

1 个答案:

答案 0 :(得分:3)

我得到了这样的工作:

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;
        }
    }
}

一切都像我想要的那样; - )