使用 MouseWheel c# winform 图表水平滚动

Posted

技术标签:

【中文标题】使用 MouseWheel c# winform 图表水平滚动【英文标题】:Chart Horizontal Scroll with MouseWheel c# winform 【发布时间】:2021-12-26 17:24:38 【问题描述】:

我的代码存在无法解决的问题:

我有一个堆积柱形图,其中包含用于制作图表的两个系列的索引 x 值,我需要水平滚动图表,所以我编写了以下代码:

(初始化部分的第一部分)

this.CHART.MouseWheel += CHART_MouseWheel1;

(然后是函数部分)

    private void CHART_MouseWheel1(object sender, MouseEventArgs e)
    
        try
        
            if (e.Delta > 0)
            
                if (this.CHART.ChartAreas[0].AxisX.ScaleView.Position < this.CHART.ChartAreas[0].AxisX.Maximum)
                
                    this.CHART.ChartAreas[0].AxisX.ScaleView.Position = this.CHART.ChartAreas[0].AxisX.ScaleView.Position + 1;
                
            
            else if (e.Delta < 0)
            
                if (this.CHART.ChartAreas[0].AxisX.ScaleView.Position > this.CHART.ChartAreas[0].AxisX.Minimum)
                
                    this.CHART.ChartAreas[0].AxisX.ScaleView.Position = this.CHART.ChartAreas[0].AxisX.ScaleView.Position - 1;
                
            
        
        catch  
    

但由于某种原因,我的最大值 this.CHART.ChartAreas[0].AxisX.Maximum 超过了系列中的最大点数,所以当我滚动到很多时,我最终会得到这样的结果:

chart visualization in runtime

我看不到滚动的最大值与系列中的点数之间有任何关系

我还认为我需要告诉你我启用了this.CHART.ChartAreas[0].AxisX.IsMarginVisible = true;

也希望解决这个问题,因为我非常接近完成我的项目。

提前做好

【问题讨论】:

【参考方案1】:

伙计们,我在尝试了很多事情后自己找到了问题的答案,主要是需要对系列 X 值进行索引,这使很多事情变得更容易,因为您现在将使用数字重点而不是在我的情况下,日期时间值,所以这就是代码:

        private void CHART1_MouseWheel(object sender, MouseEventArgs e)
    
        try
        
            if (this.CHART1.Series["S1"].Points.Count > 10)
            
                if (e.Delta > 0)
                
                    if (this.CHART1.ChartAreas[0].AxisX.ScaleView.Position < this.CHART1.ChartAreas[0].AxisX.Maximum - this.CHART1.ChartAreas[0].AxisX.ScaleView.Size - 1)
                    
                        this.CHART1.ChartAreas[0].AxisX.ScaleView.Position = this.CHART1.ChartAreas[0].AxisX.ScaleView.Position + 1;
                    
                
                else if (e.Delta < 0)
                
                    if (this.CHART1.ChartAreas[0].AxisX.ScaleView.Position > 1)
                    
                        this.CHART1.ChartAreas[0].AxisX.ScaleView.Position = this.CHART1.ChartAreas[0].AxisX.ScaleView.Position - 1;
                    
                
            
        
        catch (System.Exception ex)
        
            throw ex;
        
    

我希望我能帮助你解决同样的问题

【讨论】:

以上是关于使用 MouseWheel c# winform 图表水平滚动的主要内容,如果未能解决你的问题,请参考以下文章

Completely disable mousewheel on a WinForm

请问C# winform使用pcitruebox控件查看图片如何实现放大,缩小功能?

使用带有滚动条的任何控件时不会触发 MouseWheel 事件(在 C# Windows 窗体中)

c# MouseWheel Scroll 和 RTB VScroll 事件

c#如何设置panel的鼠标滑轮事件?MouseWheel只能应用于Form吗?

C# - 如何防止我的组合框中的鼠标滚轮滚动?