Я пытаюсь динамически добавить элемент управления Chart в форму (используя C#, все должно быть. NET 4.0), но он всегда пуст (отображается только цвет фона). Я попробовал тот же код в форме, в которой уже есть элемент управления, и он работает, поэтому я представляю, что мне нужно вызвать какую-то функцию инициализации (я попытался Invalidate()
для элемента управления и Refresh()
как для элемента управления, так и для панели, в которой он находится , без разницы). Я просмотрел несколько похожих постов, которые нашел, попытался добавить любые другие команды, которые они использовали (BeginInit()
из одного такого поста), но пока не повезло. Любые идеи?
Кстати, я хочу отобразить 6-9 графиков (положение, скорость и ускорение в трехмерном пространстве), поэтому я бы предпочел добавить их динамически, чем иметь 9 наборов назначений. Вот код, который добавляет диаграммы на панель:
foreach (KeyValuePair<string, List<double>> p in b.storedValues)
{
Control c = getChartForData(p);
panel1.Controls.Add(c);
c.Invalidate();
c.Refresh();
break;
}
И функция, которая создает каждый график:
private Chart getChartForData(KeyValuePair<string, List<double>> data)
{
Chart c = new Chart();
((System.ComponentModel.ISupportInitialize)c).BeginInit();
c.Series.Clear();
c.BackColor = Color.White;
c.Height = 300;
c.Width = 500;
c.Palette = ChartColorPalette.Bright;
Series s = new Series(data.Key);
s.ChartType = SeriesChartType.Spline;
double maxValue = 0;
//NOTE: Going logarithmic on this, too big numbers
for (int i = 0; i < data.Value.Count; i++)
{
maxValue = Math.Max(Math.Log10(data.Value[i]), maxValue);
}
for (int i = 0; i < data.Value.Count; i++)
{
s.Points.AddXY(i,Math.Log10(data.Value[i]) * c.Height / maxValue);
}
c.Series.Add(s);
return c;
}
Большое спасибо заранее.