如何让 DataPoint.Tooltip 正常工作?

How can I get DataPoint.Tooltip to work properly?

我做了一个图表class。我让我们的第三方软件能够添加带有工具提示的系列。但是工具提示不起作用。

有趣的是,工具提示有时在第三方软件中有效。当我以 windows 形式测试它时,它永远不会工作...

我做错了什么?

Class:

public class DollarChart : System.Windows.Forms.DataVisualization.Charting.Chart

初始化:

public void Wrapper_Init()
{
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1;
System.Windows.Forms.DataVisualization.Charting.Series MySeries2;
chartArea1 = this.ChartAreas["ChartArea1"];
MySeries2 = this.Series["Series1"];

chartArea1.Name = "Default";

chartArea1.AxisY.IntervalAutoMode = System.Windows.Forms.DataVisualization.Charting.IntervalAutoMode.FixedCount;
chartArea1.AxisY.Enabled = System.Windows.Forms.DataVisualization.Charting.AxisEnabled.True;

chartArea1.AxisY2.IntervalAutoMode = System.Windows.Forms.DataVisualization.Charting.IntervalAutoMode.FixedCount;

// Invisible series in order to make room for primary Y-axis on chartarea.
MySeries2.Points.Add(0);
MySeries2.Points.Add(490);
MySeries2.Color = System.Drawing.Color.FromName("Transparent");

this.Name = "chart1";
}

插入数据的函数:

public void Wrapper_Populate(System.Single[] AvailDollars, int SeriesSplitter, int PlotHours)
{
System.Double[] Dollars;
Dollars = new System.Double[AvailDollars.Length];
AvailDollars.CopyTo(Dollars,0);
System.Double[] buffer;
buffer = new System.Double[SeriesSplitter];

System.Windows.Forms.DataVisualization.Charting.Series MySeries = new System.Windows.Forms.DataVisualization.Charting.Series();
MySeries.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedColumn;

Array.Copy(Dollars, 0, buffer, 0, SeriesSplitter); // Copies from the correct place in the array.
int n = 0;
foreach (double p in buffer)
{
  System.Windows.Forms.DataVisualization.Charting.DataPoint Pointer = new System.Windows.Forms.DataVisualization.Charting.DataPoint();
  Pointer.YValues[0] = p;
  Pointer.ToolTip = "Testing123";
  MySeries.Points.Add(Pointer);
  if (n == (PlotHours-1)) { break; }
  n++;
}

MySeries.Name = "Stacked_Dollars";
MySeries.YAxisType = System.Windows.Forms.DataVisualization.Charting.AxisType.Secondary;
this.Series.Add(MySeries);

为每个数据点设置工具提示的原因是,我将显示所有系列的计算总计以及每个数据点中特定系列的值。这样做的原因 array.copy 是因为我收到的值整齐地打包在一个 600 元素的数组中,每个系列分为几个部分,此外,我需要从 System.Single 转换为 System.Double。

我相信你会问我为什么要这样做。 我们正在使用第三方软件,这些软件使用了一种叫做 quickscript.net 的东西。这个第三方软件缺少的东西之一就是图表。但是,我们能够导入自定义控件。所以我们必须通过制作他们所谓的 "Client controls" 和 "Script function library".

来解决这些限制

我尝试了不同的小调整,但 none 似乎有效。似乎有效的方法是做最有效的解决方法,尽管我不太喜欢它。这样做的问题是,当您复制工具提示时,您可以使用的关键字(如“#VAL”和“\n”)不起作用。所以你实际上必须在事件处理程序中翻译它们。

这是一个问题的解决方案,而不是的解决方案。所以我不会接受,除非下个月没有其他答案出现..

this.GetToolTipText += new System.EventHandler<System.Windows.Forms.DataVisualization.Charting.ToolTipEventArgs>(this.Chart1_GetToolTipText);

private void Chart1_GetToolTipText(object sender, System.Windows.Forms.DataVisualization.Charting.ToolTipEventArgs e)
{
  // Check selected chart element and set tooltip text
  if (e.HitTestResult.ChartElementType == ChartElementType.DataPoint)
  {
    int i = e.HitTestResult.PointIndex;
    DataPoint dp = e.HitTestResult.Series.Points[i];
    decimal YValue = System.Convert.ToDecimal(dp.YValues[0]);
    YValue = System.Math.Round(YValue, 2);
    e.Text = dp.ToolTip.Replace("\n","\n").Replace("#VAL",YValue.ToString());
  }
}