У меня есть элементы управления диаграммами Microsoft в моем приложении winforms.

В настоящее время я играю значения X и y в цикле. У меня также был установлен формат оси X как

ChartAreas[0].AxisX.LabelStyle.Format={"00:00:00"}

Это отлично работало как формат времени, однако я заметил, что когда мои значения времени превышают 60 секунд (т.е. 00:00:60), вместо того, чтобы шкала перемещалась до 1 минуты (т.е. 00:01:00), она переходит на 61 (т.е. 00:00:61) вплоть до 99 до одной минуты (00:00:99), затем (00:01:00)

Есть ли способ исправить это, пожалуйста?

7
PleaseHelpMe 9 Апр 2011 в 19:15
Какой тип точек X? DateTime, двойной, интервал...?
 – 
digEmAll
9 Апр 2011 в 19:46
Двойные значения для x и y
 – 
PleaseHelpMe
9 Апр 2011 в 19:48
Я использовал формат, как показано выше, чтобы предотвратить отставание двойников.
 – 
PleaseHelpMe
9 Апр 2011 в 19:49

1 ответ

Я подозреваю, что свойство LabelStyle.Format используется так же, как и в string.Format(mySringFormat,objToFormat).
Следовательно, учитывая, что ваш базовый тип объектов X — double, он просто напечатает разделенный двоеточием двойной (например, 4321 будет 00:43:21).

Насколько я знаю, нет простого способа напечатать значение double, например значение времени, используя только строковый формат.

Если вы можете изменить код, заполняющий диаграмму, я предлагаю вам передать DateTime для значений X, и тогда вы сможете использовать собственное форматирование DateTime, например.

"HH:mm:ss" или другие

РЕДАКТИРОВАТЬ:

Согласно вашему комментарию:

// create a base date at the beginning of the method that fills the chart.
// Today is just an example, you can use whatever you want 
// as the date part is hidden using the format = "HH:mm:ss"
DateTime baseDate = DateTime.Today; 

var x = baseDate.AddSeconds((double)value1);
var y = (double)value2;
series.Points.addXY(x, y);

ИЗМЕНИТЬ 2:

Вот полный пример, эту логику легко применить к вашему коду:

private void PopulateChart()
{
    int elements = 100;

    // creates 100 random X points
    Random r = new Random();
    List<double> xValues = new List<double>();
    double currentX = 0;
    for (int i = 0; i < elements; i++)
    {
        xValues.Add(currentX);
        currentX = currentX + r.Next(1, 100);
    }

    // creates 100 random Y values
    List<double> yValues = new List<double>();
    for (int i = 0; i < elements; i++)
    {
        yValues.Add(r.Next(0, 20));
    }

    // remove all previous series
    chart1.Series.Clear();

    var series = chart1.Series.Add("MySeries");
    series.ChartType = SeriesChartType.Line;
    series.XValueType = ChartValueType.Auto;

    DateTime baseDate = DateTime.Today;
    for (int i = 0; i < xValues.Count; i++)
    {
        var xDate = baseDate.AddSeconds(xValues[i]);
        var yValue = yValues[i];
        series.Points.AddXY(xDate, yValue);
    }

    // show an X label every 3 Minute
    chart1.ChartAreas[0].AxisX.Interval = 3.0;
    chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Minutes;

    chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";
}
12
digEmAll 9 Апр 2011 в 21:50
Хорошо, но могу я спросить, как я буду делать DateTime для значений X? пожалуйста
 – 
PleaseHelpMe
9 Апр 2011 в 20:13
@PleaseHelpMe: Вы привязываете диаграмму к источнику данных или добавляете элементы с помощью series.Points.AddXY() ?
 – 
digEmAll
9 Апр 2011 в 20:16
Добавление моих элементов с использованием метода "....Points.addXY((double)value1,(double)value2)"
 – 
PleaseHelpMe
9 Апр 2011 в 20:18
Я должен указать значения как двойные, это немного длинная история: S
 – 
PleaseHelpMe
9 Апр 2011 в 20:18
Я продолжаю получать значения ДД/ММ/ГГГ по оси x вместо времени ЧЧ:ММ:СС :(
 – 
PleaseHelpMe
9 Апр 2011 в 20:46