使用鼠标滚轮绘制水平滚动图表 c# winform
Chart Horizontal Scroll with MouseWheel c# winform
我的代码有一个我无法解决的问题:
我有一个堆叠柱形图,其中包含制作图表的两个系列的索引 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;
。
希望也能解决这个问题,因为我非常接近完成我的项目。
提前准备好
嗨,伙计们,我在尝试了很多事情后自己找到了问题的答案,主要是 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;
}
}
我希望我已经帮助了同样的问题tyall
我的代码有一个我无法解决的问题:
我有一个堆叠柱形图,其中包含制作图表的两个系列的索引 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;
。
希望也能解决这个问题,因为我非常接近完成我的项目。
提前准备好
嗨,伙计们,我在尝试了很多事情后自己找到了问题的答案,主要是 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;
}
}
我希望我已经帮助了同样的问题tyall