在选择切片 = true 时查看饼图上的 #VAL 标签而不是系列内部
Posted
技术标签:
【中文标题】在选择切片 = true 时查看饼图上的 #VAL 标签而不是系列内部【英文标题】:View #VAL label on Pie Chart and NOT inside the Series when slice selected = true 【发布时间】:2014-01-03 14:28:02 【问题描述】:我有一个使用 mschart 创建的饼图,现在我已经对填充的数据进行了硬编码。选择切片时,我希望一个标签出现显示值 - 它现在它现在但 aswell在图表(正确) em>上显示,它在系列中显示(不正确)。
伪代码
//Diplay chart and data
//Highlight over slices and get #PERCENT (also when selected slice)
//Select slice
//Expand slice
//Display #VAL on slice & NOT in Series
//Re-select slice
//Minimise slice
我有两种方法 - MouseDown 和 MouseMove:(#PERCENT 工具提示可以正常工作)
private void PieChart_MouseDown(object sender, MouseEventArgs e)
HitTestResult result = PieChart.HitTest(e.X, e.Y);
// Exit event if no item was clicked on
if (result.PointIndex < 0)
return;
// Check if data point is already exploded
bool exploded = (PieChart.Series[0].Points[result.PointIndex].CustomProperties == "Exploded=true");
// Remove all exploded attributes
foreach (DataPoint p in PieChart.Series[0].Points)
p.CustomProperties = "PieLabelStyle = Disabled, Exploded = False";
p.Label = "";
p.ToolTip = "";
// If data point is already exploded get out
if (exploded)
return;
// If data point is selected or if legend item is selected
if (result.ChartElementType == ChartElementType.DataPoint || result.ChartElementType == ChartElementType.LegendItem)
DataPoint point = PieChart.Series[0].Points[result.PointIndex];
point.Label = "Value: #VAL";
point.LabelBackColor = Color.Bisque;
point.LabelBorderColor = Color.Black;
point.Font = new Font("Calibri Light", 8);
point.CustomProperties = "PieLabelStyle = Inside, Exploded = True";
private void PieChart_MouseMove(object sender, MouseEventArgs e)
HitTestResult result = PieChart.HitTest(e.X, e.Y);
foreach (DataPoint point in PieChart.Series[0].Points) // ALL DATA POINTS - SECTIONS OF CHART
point.BackSecondaryColor = Color.Black;
point.BackHatchStyle = ChartHatchStyle.None;
point.BorderWidth = 1;
// If a Data Point or a Legend item is selected
if (result.ChartElementType == ChartElementType.DataPoint || result.ChartElementType == ChartElementType.LegendItem)
this.Cursor = Cursors.Hand;
DataPoint point = PieChart.Series[0].Points[result.PointIndex];
point.ToolTip = "Percentage: #PERCENT";
point.BackSecondaryColor = Color.White;
point.BackHatchStyle = ChartHatchStyle.Percent25;
point.BorderWidth = 2;
else
this.Cursor = Cursors.Default;
现在做了什么:-
我想要它做什么:-
通知 series7 现在可见,而不是值 - 正确!
尝试的解决方案:
PieChart.Series[0].Points.Add(new DataPoint(1, 1) LegendText = "aaa" );
point.Label = "Value: #VAL";
point.LegendText = "Series#INDEX";
【问题讨论】:
【参考方案1】:在填充图表数据时只需使用 DataPoint 的 LegendText
属性:
PieChart.Series[0].Points.Add(new DataPoint(1, 1) LegendText = "aaa" );
PieChart.Series[0].Points.Add(new DataPoint(1, 2) LegendText = "bbb" );
PieChart.Series[0].Points.Add(new DataPoint(1, 3) LegendText = "ccc" );
另一种方法是在每次设置Label
时设置LegendText
:
point.Label = "Value: #VAL";
point.LegendText = "Series#INDEX"; // Or whatever you want
【讨论】:
我试过你的解决方案都不管用:/查看更新的问题。如果选择了数据点或选择了图例(在方法 cmets 中),我将两段代码都放在 MouseDown 方法中。 代码的第一位不应放在MouseDown
事件中。在向图表添加新点时应该使用它。
我已经为你创建了示例项目:download
我尝试了示例项目,看起来工作正常。 Points.Add 应位于 Form_Load 中,如项目所示。如果你把鼠标放在里面,那么每次按下鼠标都会创建一个新点,这就是为什么你有这么多传说
谢谢谢谢谢谢! AGES 我无法理解它!以上是关于在选择切片 = true 时查看饼图上的 #VAL 标签而不是系列内部的主要内容,如果未能解决你的问题,请参考以下文章