【问题标题】:How to modify C# Chart control chartArea percentages如何修改C#图表控制chartArea百分比
【发布时间】:2013-03-15 01:15:57
【问题描述】:

如果我有一个包含 2 chartAreas 的图表控件,默认情况下,图表控件会将 chartAreas 放在彼此的顶部,使每个区域占据图表控件可用大小的 50%。

有没有办法改变 chartAreas 的百分比,这样我就可以说,让顶部图表占区域的 75%,底部图表占 25%?

【问题讨论】:

  • @Peretz 对于这一部分,我使用设计器来生成图表。虽然我可以复制该代码,但我不确定它是否有用。它只是一个标准图表,其中包含 2 个图表区域。没有我自己的代码会影响这一点,只有设计师。我想看看是否有人知道执行此操作的代码。

标签: c# mschart


【解决方案1】:

所以,我最终找到了它,但我不认为它有很好的记录。每个chartArea 都有ChartArea.Position 的属性。 ElementPosition 类型的此属性,包含与此问题相关的 4 个属性。

Height:获取或设置图表元素的高度。
Width:获取或设置图表元素的宽度。
X:获取或设置适用图表元素左上角的相对 X 坐标。
Y:获取或设置适用图表元素左上角的相对 Y 坐标。

当你深入挖掘时,HeightWidth 属性也是用相对坐标表示的,所以你只能输入 0 - 100。

基本上,你必须改变每个高度,每个 Y 来移动它们。初始创建后,不会自动调整其他数字。

例如,如果我只是将 chartArea[1] 的 Height 更改为更小的值,它仍将锚定在原来的位置,这是有道理的,在它下面留下很多空白。

如果我再增加chartArea[0] 的Height,它可能会覆盖我们刚刚调整大小的chartArea[1]。那么接下来我要设置chartArea[1]的Y向下移动,这样就不会被覆盖,空白就没有了。

所以,为了得到与我在问题中提出的类似的内容,我将其设置为:

chart1.ChartAreas[0].Position.Y = 10;
chart1.ChartAreas[0].Position.Height = 60;
chart1.ChartAreas[1].Position.Y = 70;
chart1.ChartAreas[1].Position.Height = 20;

为了让这个解释更清楚一点,我将这些 chartAreas 所在的 Chart 控件称为“父级”。

这些是百分比,但对于本示例,我们假设父对象的大小为 100 像素。

这将第一个 chartArea 设置为 10 像素开始显示,并使其高约 60 像素。然后它开始在 70 像素处显示第二个图表区域,并使其高约 20 像素。

如果这个图表是 200 像素高,那么比例将是相同的,但实际像素将是两倍(因此将第一个图表区域设置为 60 会使其高 120 像素)。

我确实在我的实际程序中多加了一点,因为它的标题覆盖了轴标签,但我觉得这些数字有助于更好地解释它。

【讨论】:

  • 如果在用户看不到图表的情况下完成,这会破坏图表(我的图表在单独的 TabPage 上,只有在显示图表 之后调用它才能正常工作到用户的眼睛)。
  • 到目前为止,我能找到的唯一合适的地方(产生正确的结果)是 chart_Paint 事件处理程序(但不是 PrePaint/PostPaint 或其他任何地方)。但是在取消最大化窗口时会产生一些可见的垃圾。
  • 我能得到的最好结果是把它放到同一个 TabPage 上另一个控件的 Paint 事件处理程序中,但它仍然不完美,而且看起来也很脏。
【解决方案2】:

您还可以将第二个图表的 .Y 位置设置为第一个图表的底部。这样你只需要担心第一个图表的位置。代码如下所示:

chart1.ChartAreas[0].Position.Y = 10;
chart1.ChartAreas[0].Position.Height = 60;
chart1.ChartAreas[1].Position.Y = chart1.ChartAreas[0].Position.Bottom;
chart1.ChartAreas[1].Position.Height = 20;

当然,您也可以填充 .Y 位置,具体取决于图表之间需要多少空白。我将这种方法用于我构建的使用多个图表的应用程序,它保证每个图表都可以正确定位,无论对单个图表做什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多