У меня есть элементы управления диаграммами 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)
Есть ли способ исправить это, пожалуйста?
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";
}
Похожие вопросы
Связанные вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.