.. показать сообщение на графике .. Могу ли я это сделать?
Конечно. На самом деле существует много способов, от установки Title
диаграммы до использования Paint
события и DrawString
или создания TextAnnotation
и т. Д.
Два последних варианта легко центрировать, и оба сохранят положение даже при изменении размера диаграммы.
Пример 1 - A TextAnnotation
:
TextAnnotation ta = new TextAnnotation();
Настройте его так:
ta.Text = "No Data Yet";
ta.X = 45; // % of the..
ta.Y = 45; // chart size
ta.Font = new Font("Consolas", 20f);
ta.Visible = false; // first we hide it
chart1.Annotations.Add(ta);
Показывать всякий раз, когда данные изменяются:
ta.Visible = (chart1.Series[seriesNameOrIndex].Points.Count == 0)
Пример 2 - Рисование сообщения в событии Paint
:
private void chart1_Paint(object sender, PaintEventArgs e)
{
if (chart1.Series[seriesNameOrIndex].Points.Count == 0)
{
using (Font font = new Font("Consolas", 20f))
using (StringFormat fmt = new StringFormat()
{ Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center })
e.Graphics.DrawString("No data yet",
font, Brushes.Black, chart1.ClientRectangle, fmt);
}
}
Это должно постоянно обновляться, так как добавление или удаление DataPoints
вызовет событие Paint
.
Кстати : рекомендуемый рекомендуемый способ проверки коллекции на наличие каких-либо данных - использование функции Linq Any()
:
(!chart1.Series[seriesNameOrIndex].Points.Any())
Он настолько быстр, насколько это возможно, и ясен в своих намерениях.