【问题标题】:Display #VAL of point when mouse moves over in Line Graph (Mschart)当鼠标在折线图中移动时显示点的#VAL (Mchart)
【发布时间】:2014-01-27 20:29:10
【问题描述】:

对于 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;

MouseMove 事件:

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;
}

我不确定如何为数据点自动创建工具提示,在鼠标悬停时激活然后将其移除。光标线工作正常!

【问题讨论】:

  • 你想要tooltip之类的东西吗?
  • 这没有意义?是的,我想要上面指定的工具提示。
  • 类似serie.ToolTip = "X:#VALX Y:#VALY"; ?
  • 我试过了,但没有用...试过:chart1.Series[0].ToolTip = "#VAL"; (简单测试),但同样,由于某种原因根本不起作用。

标签: c# visual-studio .net-3.5 tooltip mschart


【解决方案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);
}

【讨论】:

  • 这可以在网页版的ms图表中完成吗?我没有看到此事件列出。
【解决方案2】:

为您的问题提供答案。

chart1.Series[0].Points[n].ToolTip = "#VALX";

使用折线图进行了尝试和测试。

【讨论】:

    【解决方案3】:

    标记为解决方案的那个是正确的,但不是很清楚,我想补充一下细节。

    当您填充图表后,您应该构造字符串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;
    

    其中valoresvalores2 是不同的图。

    然后添加一个程序,提供有关鼠标在图形上移动的说明,它应该可以工作。

    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);    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多