gpt4 book ai didi

.net - 通过拖动滚动条使 DataVisualization Chart 对象可缩放和滚动

转载 作者:行者123 更新时间:2023-12-04 12:43:55 25 4
gpt4 key购买 nike

我正在使用 System.Windows.Forms.DataVisualization.Charting.Chart 控件,并将 ChartArea 的 AxisX 和 Y 都设置为 true。放大图表时,我看到滚动条,但无法拖动它。是否可以拖动滚动条,并在拖动滚动条按钮时让图表显示移动?我想让它对用户来说是直观和互动的。谢谢!

最佳答案

为了放大和缩小图表,我使用了 MouseWheel 事件。我将在下面展示的解决方案远非完美,但它有效,至少对我来说:)。

  • 应该为每个数据系列计算 maxChangeRange 和 minChangeRange 的值(21 和 -1 是我在我的项目中使用的值)。此外,假设两个轴具有相似的值范围,如果它们不同,则需要为其中一个添加某种缩放。
  • 从 MouseEventArgs 接收的鼠标位置(e.X 和 e.Y)是图表控件内的鼠标位置,而不是图表 :) 内的鼠标位置,因此这种位置缩放功能有点错误。
  • 为了使其工作,您需要使用图表区域和轴定义的图表控件
  • 如果启用了轴标签自动适合,图表在缩放时可能会有点“跳跃”。
  • 我是 C# 和 winforms 世界的初学者,所以请记住,这可能不是最好的解决方案。
    // Actual total zoom value
    int deltaScrollTotal;
    private void chart_MouseWheel(object sender, MouseEventArgs e)
    {
    int maxChangeRange = 21;
    int minChangeRange = -1;

    int deltaScroll = e.Delta / Math.Abs(e.Delta);
    deltaScrollTotal += deltaScrollTotal + deltaScroll > minChangeRange
    && deltaScrollTotal + deltaScroll < maxChangeRange
    ? deltaScroll : 0;
    // Additional calculation in order to obtain pseudo
    // "positional zoom" feature
    double minXScale = (double)e.X / (double)chart.Width;
    double maxXScale = 1 - minXScale;
    double minYScale = (double)e.Y / (double)chart.Height;
    double maxYScale = 1 - minYScale;

    // Max and min values into which axis need to be scaled/zoomed
    double maxX = chart.ChartAreas[0].AxisX.Maximum
    - deltaScrollTotal * maxXScale;
    double minX = chart.ChartAreas[0].AxisX.Minimum
    + deltaScrollTotal * minXScale;
    double maxY = chart.ChartAreas[0].AxisY.Maximum
    - deltaScrollTotal * minYScale;
    double minY = chart.ChartAreas[0].AxisY.Minimum
    + deltaScrollTotal * maxYScale;

    chart.ChartAreas[0].AxisX.ScaleView.Zoom( minX, maxX);
    chart.ChartAreas[0].AxisY.ScaleView.Zoom( minY, maxY);
    }

  • 这个事件需要附加到图表控件上:
        chart.MouseWheel += new MouseEventHandler(chart_MouseWheel);

    关于.net - 通过拖动滚动条使 DataVisualization Chart 对象可缩放和滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2876818/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com