对于Visual Studio 2008中的C#,一般没有关于Mscharts的文档。我已经研究了很多解决方案,但似乎没有任何工作!当用户将鼠标悬停在数据点的线上时,应显示该特定点的值,并且当失去焦点时应消失。我认为,最好的方法是将工具提示添加到我的图表中,但我的问题实际上是从数据点获取值。目前这个图表看起来像这样只有硬编码的数据用于测试,但是将从文件中导入数据:
_注意:我确实认识到线条不现实 - 不管怎么说都不适合我的项目。它只是用于测试。当我完成项目时,会有几个数据点._
var sv = new System.Windows.Forms.DataVisualization.Charting.Series("1");
sv.ChartType = SeriesChartType.Line;
sv.Points.Add(new DataPoint(201, 10));
sv.Points.Add(new DataPoint(3, 11));
sv.YAxisType = AxisType.Primary;
chart1.Series.Add(sv);
var ov = new System.Windows.Forms.DataVisualization.Charting.Series("2");
ov.ChartType = SeriesChartType.Line;
ov.Points.Add(new DataPoint(201, 25));
ov.Points.Add(new DataPoint(8, 3));
ov.YAxisType = AxisType.Secondary;
chart1.Series.Add(ov);
var oc = new System.Windows.Forms.DataVisualization.Charting.Series("3");
oc.ChartType = SeriesChartType.Line;
oc.YAxisType = AxisType.Secondary;
oc.Points.Add(new DataPoint(1, 5));
oc.Points.Add(new DataPoint(190, 90));
oc.Points.Add(new DataPoint(200, 90));
chart1.Series.Add(oc);
var sn = new System.Windows.Forms.DataVisualization.Charting.Series("4");
sn.ChartType = SeriesChartType.Line;
sn.Points.Add(new DataPoint(9, 30));
sn.Points.Add(new DataPoint(150, 28));
sn.XAxisType = AxisType.Primary;
chart1.Series.Add(sn);
Chart_Line.ChartAreas[0].AxisX.LabelStyle.Font = Chart_Line.ChartAreas[0].AxisY.LabelStyle.Font = Chart_Line.ChartAreas[0].AxisY2.LabelStyle.Font = new System.Drawing.Font("Calibri Light", 8);
Chart_Line.ChartAreas[0].AxisX.Minimum = 0;
Chart_Line.ChartAreas[0].AxisX.Maximum = 201;
Chart_Line.ChartAreas[0].AxisX.Interval = 15;
Chart_Line.ChartAreas[0].AxisY.Maximum = 140;
Chart_Line.ChartAreas[0].AxisY.Interval = 20;
Chart_Line.ChartAreas[0].AxisY.Minimum = 0;
Chart_Line.ChartAreas[0].AxisY2.Maximum = 30;
Chart_Line.ChartAreas[0].AxisY2.Interval = 5;
Chart_Line.ChartAreas[0].AxisY2.Minimum = 0;
Chart_Line.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
Chart_Line.ChartAreas[0].AxisY.MajorGrid.Enabled = false;
Chart_Line.ChartAreas[0].AxisY2.MajorGrid.Enabled = false;
private void Chart1_MouseMove(object sender, MouseEventArgs e)
{
HitTestResult result = chart1.HitTest(e.X, e.Y);
System.Drawing.Point p = new System.Drawing.Point(e.X, e.Y);
chart1.ChartAreas[0].CursorX.Interval = 0;
chart1.ChartAreas[0].CursorX.SetCursorPixelPosition(p, true);
chart1.ChartAreas[0].CursorX.LineColor = Color.Crimson;
chart1.ChartAreas[0].CursorX.LineWidth = 1;
chart1.ChartAreas[0].CursorY.SetCursorPixelPosition(p, true);
chart1.ChartAreas[0].CursorY.LineColor = Color.Crimson;
chart1.ChartAreas[0].CursorY.LineWidth = 1;
}
我不确定如何自动创建数据点的工具提示,当鼠标悬停然后将其删除时激活。光标线工作正常!
答案 0 :(得分:1)
比我想象的要容易:)填充图表非常复杂,这很可能就是为什么我这么困惑!
string info = "Value: " + "#VAL{N2}" + "\n" + "Average: " + "#AVG{N2}" + "\n" + "Minimum: " + "#MIN{N2}" + "\n" + "Maximum: " + "#MAX{N2}" + "\n"
+ "First: " + "#FIRST{N2}" + "\n" + "Last: " + "#LAST{N2}";
Chart1.Series[0].ToolTip = "Series name..." + "\n" + info;
Chart1.Series[1].ToolTip = "Series name2..." + "\n" + info;
Chart1.Series[2].ToolTip = "Series name3..." + "\n" + info;
private void Chart1_MouseMove(object sender, MouseEventArgs e)
{
HitTestResult result = Chart1.HitTest(e.X, e.Y);
System.Drawing.Point p = new System.Drawing.Point(e.X, e.Y);
Chart1.ChartAreas[0].CursorX.Interval = 0;
Chart1.ChartAreas[0].CursorX.SetCursorPixelPosition(p, true);
Chart1.ChartAreas[0].CursorY.SetCursorPixelPosition(p, true);
}
答案 1 :(得分:0)
为您的问题提供答案。
chart1.Series[0].Points[n].ToolTip = "#VALX";
尝试用折线图测试。
答案 2 :(得分:0)
标记为解决方案的那个是正确的,但不是很清楚,我想补充一些细节。
当您填充图形后,您应该构造 String info
变量,该变量包含像我这样的分析师会重视的所有漂亮信息。
像 VAL{N2}
这样的符号是什么?
这些符号具有不同的含义,即 explained by Microsoft。
string info = "Value: " + "#VAL{N2}" + "\n" + "Average: " + "#AVG{N2}" + "\n" + "Minimum: " + "#MIN{N2}" + "\n" + "Maximum: " + "#MAX{N2}" + "\n"
+ "First: " + "#FIRST{N2}" + "\n" + "Last: " + "#LAST{N2}";
Grafico.Series["valores"].ToolTip = "Detalles..." + "\n" + info;
Grafico.Series["valores2"].ToolTip = "Detalles..." + "\n" + info;
其中 valores
和 valores2
是不同的图表。
然后添加一个程序,给出有关鼠标在图形上移动的说明,它应该可以工作。
private void Grafico_MouseMove(object sender, MouseEventArgs e)
{
HitTestResult result = Grafico.HitTest(e.X, e.Y);
System.Drawing.Point p = new System.Drawing.Point(e.X, e.Y);
Grafico.ChartAreas["valores"].CursorX.Interval = 0;
Grafico.ChartAreas["valores2"].CursorX.SetCursorPixelPosition(p, true);
}