如何在 MS 图表中显示包含各种数据的工具提示
How to display tooltips with various data in MS charts
我正在用 C# 开发蜡烛图。
我一直致力于使用当前数据网格视图中的数据创建蜡烛图。
此外,当我将光标放在图表的蜡烛点上时,我想显示 datagridview 的信息(开盘价、收盘价、最高价、最低价)。 (见图)
当前开发源。
DataTable table_ChartData = new DataTable();
table_ChartData.Columns.Add("Id");
table_ChartData.Columns.Add("Open");
table_ChartData.Columns.Add("Close");
table_ChartData.Columns.Add("High");
table_ChartData.Columns.Add("Low");
table_ChartData.Columns.Add("Day");
dataGridView1.DataSource = table_ChartData;
chart1.ChartAreas["ChartArea1"].AxisX.MajorGrid.LineWidth = 1;
chart1.ChartAreas["ChartArea1"].AxisY.MajorGrid.LineWidth = 1;
chart1.ChartAreas["ChartArea1"].AxisY.Maximum = max;
chart1.ChartAreas["ChartArea1"].AxisY.Minimum = min;
chart1.Series["Daily"].XValueMember = "Day";
chart1.Series["Daily"].YValueMembers = "High,Low,Open,Close";
chart1.Series["Daily"].XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Date;
chart1.Series["Daily"].CustomProperties = "PriceDownColor=Blue,PriceUpColor=Red";
chart1.Series["Daily"]["OpenCloseStyle"] = "Triangle";
chart1.Series["Daily"]["ShowOpenClose"] = "Both";
chart1.DataSource = table_ChartData;
chart1.DataBind();
private void chart1_MouseMove(object sender, MouseEventArgs e)
{
Point mousePoint = new Point(e.X, e.Y);
chart1.ChartAreas[0].CursorX.SetCursorPixelPosition(mousePoint, true);
chart1.ChartAreas[0].CursorY.SetCursorPixelPosition(mousePoint, true);`
var pos = e.Location;
if (prevPosition.HasValue && pos == prevPosition.Value)
return;
tooltip.RemoveAll();
prevPosition = pos;
var results = chart1.HitTest(pos.X, pos.Y, false, ChartElementType.DataPoint); // set ChartElementType.PlottingArea for full area, not only DataPoints
foreach (var result in results)
{
if (result.ChartElementType == ChartElementType.DataPoint) // set ChartElementType.PlottingArea for full area, not only DataPoints
{
var yVal = result.ChartArea.AxisY.PixelPositionToValue(pos.Y);
tooltip.Show(((int)yVal).ToString(), chart1, pos.X, pos.Y - 15);
}
}
}
感谢您的帮助。谢谢:)
您正在 MouseMove
中创建 ToolTips
;这是一种方法,但最简单的方法是让图表通过在创建 DataPoints
..:[=26=] 时设置 DataPoint.Tooltip
属性 来完成工作
DataPoint dp = new DataPoint (..);
dp.ToolTip = "x=" + dp.XValue + "\n high=" + dp.YValues[0]+ "\n low=" + dp.YValues[1] + ..;
yourSeries.Points.Add(dp);
.. 或者,如果积分是 DataBound
,则在绑定后立即添加 ToolTips
,或者将它们包含在绑定本身中。
请注意,只有一些 various data binding methods 可以让您像工具提示一样绑定 'extended chart properties'。 Points.DataBind
被明确提及。这意味着您需要为数据源中的工具提示准备一个字段,因为我知道无法在 otherField
字符串中编写连接表达式..
如果您的数据在 DataTable
中且具有以下字段,您可以使用如下语法进行绑定:
var enumerableTable = (dt as System.ComponentModel.IListSource).GetList();
yourSeries.Points.DataBind(enumerableTable, "x-col",
"highField, lowField..", "Tooltip=tooltipField");
如果您想在 MouseMove
中执行此操作,您可以轻松获得对您结束的 DataPoint
的引用(如果有的话),并像上面那样使用它的所有值..:
DataPoint dp = null;
if (results.PointIndex >= 0 && results.ChartElementType == ChartElementType.DataPoint)
{
dp = results.Series.Points[hitt.PointIndex];
string tText = "x=" + dp.XValue + "\n high=" +
dp.YValues[0]+ "\n low=" + dp.YValues[1] + ..;
..
}
请注意,HitTest 结果是一个具有多个属性的对象。无需循环!
我正在用 C# 开发蜡烛图。
我一直致力于使用当前数据网格视图中的数据创建蜡烛图。
此外,当我将光标放在图表的蜡烛点上时,我想显示 datagridview 的信息(开盘价、收盘价、最高价、最低价)。 (见图)
当前开发源。
DataTable table_ChartData = new DataTable();
table_ChartData.Columns.Add("Id");
table_ChartData.Columns.Add("Open");
table_ChartData.Columns.Add("Close");
table_ChartData.Columns.Add("High");
table_ChartData.Columns.Add("Low");
table_ChartData.Columns.Add("Day");
dataGridView1.DataSource = table_ChartData;
chart1.ChartAreas["ChartArea1"].AxisX.MajorGrid.LineWidth = 1;
chart1.ChartAreas["ChartArea1"].AxisY.MajorGrid.LineWidth = 1;
chart1.ChartAreas["ChartArea1"].AxisY.Maximum = max;
chart1.ChartAreas["ChartArea1"].AxisY.Minimum = min;
chart1.Series["Daily"].XValueMember = "Day";
chart1.Series["Daily"].YValueMembers = "High,Low,Open,Close";
chart1.Series["Daily"].XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Date;
chart1.Series["Daily"].CustomProperties = "PriceDownColor=Blue,PriceUpColor=Red";
chart1.Series["Daily"]["OpenCloseStyle"] = "Triangle";
chart1.Series["Daily"]["ShowOpenClose"] = "Both";
chart1.DataSource = table_ChartData;
chart1.DataBind();
private void chart1_MouseMove(object sender, MouseEventArgs e)
{
Point mousePoint = new Point(e.X, e.Y);
chart1.ChartAreas[0].CursorX.SetCursorPixelPosition(mousePoint, true);
chart1.ChartAreas[0].CursorY.SetCursorPixelPosition(mousePoint, true);`
var pos = e.Location;
if (prevPosition.HasValue && pos == prevPosition.Value)
return;
tooltip.RemoveAll();
prevPosition = pos;
var results = chart1.HitTest(pos.X, pos.Y, false, ChartElementType.DataPoint); // set ChartElementType.PlottingArea for full area, not only DataPoints
foreach (var result in results)
{
if (result.ChartElementType == ChartElementType.DataPoint) // set ChartElementType.PlottingArea for full area, not only DataPoints
{
var yVal = result.ChartArea.AxisY.PixelPositionToValue(pos.Y);
tooltip.Show(((int)yVal).ToString(), chart1, pos.X, pos.Y - 15);
}
}
}
感谢您的帮助。谢谢:)
您正在 MouseMove
中创建 ToolTips
;这是一种方法,但最简单的方法是让图表通过在创建 DataPoints
..:[=26=] 时设置 DataPoint.Tooltip
属性 来完成工作
DataPoint dp = new DataPoint (..);
dp.ToolTip = "x=" + dp.XValue + "\n high=" + dp.YValues[0]+ "\n low=" + dp.YValues[1] + ..;
yourSeries.Points.Add(dp);
.. 或者,如果积分是 DataBound
,则在绑定后立即添加 ToolTips
,或者将它们包含在绑定本身中。
请注意,只有一些 various data binding methods 可以让您像工具提示一样绑定 'extended chart properties'。 Points.DataBind
被明确提及。这意味着您需要为数据源中的工具提示准备一个字段,因为我知道无法在 otherField
字符串中编写连接表达式..
如果您的数据在 DataTable
中且具有以下字段,您可以使用如下语法进行绑定:
var enumerableTable = (dt as System.ComponentModel.IListSource).GetList();
yourSeries.Points.DataBind(enumerableTable, "x-col",
"highField, lowField..", "Tooltip=tooltipField");
如果您想在 MouseMove
中执行此操作,您可以轻松获得对您结束的 DataPoint
的引用(如果有的话),并像上面那样使用它的所有值..:
DataPoint dp = null;
if (results.PointIndex >= 0 && results.ChartElementType == ChartElementType.DataPoint)
{
dp = results.Series.Points[hitt.PointIndex];
string tText = "x=" + dp.XValue + "\n high=" +
dp.YValues[0]+ "\n low=" + dp.YValues[1] + ..;
..
}
请注意,HitTest 结果是一个具有多个属性的对象。无需循环!