C# 如何使用C在WinForms MS图表中打印范围栏两侧的标签#

C# 如何使用C在WinForms MS图表中打印范围栏两侧的标签#,c#,winforms,mschart,C#,Winforms,Mschart,如何为rangebarchart系列中的每个Y值添加标签 大家都知道,要绘制rangebartype系列,我们需要两个yvalue,分别为yvalue[0]和yvalue[1]。在这里,我需要为每个yvalue添加数据标签(这意味着在yvalue[0]和yvalue[1])。我如何实现这一点?有人能建议我吗?请 对于范围栏,标签应如下所示(显示在范围栏的两侧) 在MS图表中没有内置的方法来实现这一点。然而,有一个难看的小变通方法,可以让你得到想要的显示效果 对于要显示的每个数据点(rangeba

如何为rangebarchart系列中的每个Y值添加标签

大家都知道,要绘制rangebartype系列,我们需要两个yvalue,分别为yvalue[0]和yvalue[1]。在这里,我需要为每个yvalue添加数据标签(这意味着在yvalue[0]和yvalue[1])。我如何实现这一点?有人能建议我吗?请

对于范围栏,标签应如下所示(显示在范围栏的两侧)


在MS图表中没有内置的方法来实现这一点。然而,有一个难看的小变通方法,可以让你得到想要的显示效果

对于要显示的每个数据点(rangebar),需要创建两个相互重叠的数据点。例如:
数据点0:X=1 Y=5,10
数据点1:X=1 Y=10,5

这两个数据点位于彼此的顶部,除了一个从左到右显示,另一个从右到左显示。
对于每个数据点,在CustomProperties下都有BarLabelStyle属性。对于这两个数据点,将其设置为“外部”。通常情况下,这将在范围栏的右侧显示标签,但对于具有反向Y值的DataPoint1,标签现在放置在范围栏的左侧。因此,将DataPoint0的标签设置为10(最大值),将DataPoint1的标签设置为5(最小值)

这样看起来就像一个范围栏,最小值在左边,最大值在右边


注意:如果范围栏的任意一端太靠近图形的边缘,MS Chart将以其无穷的智慧强制标签显示在范围栏内。要克服这一点,实际上可以向DataPoint对象的Y值添加第三个数字。第三个值不会显示,但如果它大于数据系列中最大的Y值,则会强制图表重新缩放以适应此较大的值,因此不会将标签强制放在范围栏内。您也可以用另一种方法设置图表区的属性。

这是我已经做过的。无论如何,谢谢。我们不能在范围栏的两侧画一个矩形,在其中添加一些文本吗?或者有没有办法在MsChart上的任意位置绘制自由文本?没有在MS图表对象上绘制自由文本的规定。我一直在MS Chart中遇到这些小限制。尽管它基本上是一个很好的自定义控件,但在大多数情况下,我选择使用自己的自定义图表控件,因为我可以轻松地为特殊任务自定义它们。我找到了在图表的绘制事件中使用Graphics.DrawString方法在MS图表上绘制自由文本的方法。
Label1 ███████████████ Label2

                    Label███████████████████ Label