7

如何使用鼠标滚轮启用缩放 Microsoft 图表控件

我有以下代码,我需要知道如何进行此活动?在哪个班。。

private void chData_MouseWheel(object sender, MouseEventArgs e)
{
    try
    {
        if (e.Delta < 0)
        {
            chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset();
            chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset();
        }

        if (e.Delta > 0)
        {
            double xMin = chart1.ChartAreas[0].AxisX.ScaleView.ViewMinimum;
            double xMax = chart1.ChartAreas[0].AxisX.ScaleView.ViewMaximum;
            double yMin = chart1.ChartAreas[0].AxisY.ScaleView.ViewMinimum;
            double yMax = chart1.ChartAreas[0].AxisY.ScaleView.ViewMaximum;

            double posXStart = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.Location.X) - (xMax - xMin) / 4;
            double posXFinish = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.Location.X) + (xMax - xMin) / 4;
            double posYStart = chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Location.Y) - (yMax - yMin) / 4;
            double posYFinish = chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Location.Y) + (yMax - yMin) / 4;

            chart1.ChartAreas[0].AxisX.ScaleView.Zoom(posXStart, posXFinish);
            chart1.ChartAreas[0].AxisY.ScaleView.Zoom(posYStart, posYFinish);
        }
    }
    catch { }            
}
4

2 回答 2

5

我认为上面的答案应该是,

chData.MouseWheel += new MouseEventHandler(chData_MouseWheel);

但是根据我的发现,只要您不将焦点放在代码中的图表控件上,图表的鼠标滚轮就不起作用。因此,我使用图表控件的鼠标输入将焦点设置为图表,并使用图表控件的鼠标离开事件将控件设置回其父级。

所以你需要在你的代码中添加下面的行,相应地绑定图表控件的鼠标离开和鼠标进入事件,再加上上面的行。

    private void chartTracking_MouseEnter(object sender, EventArgs e)
    {
        this.chartTracking.Focus();
    }

    private void chartTracking_MouseLeave(object sender, EventArgs e)
    {
        this.chartTracking.Parent.Focus();
    }
于 2014-07-11T23:17:25.790 回答
3

您拥有的是MouseWheel事件的处理程序方法。您需要将处理程序方法附加到MouseWheel图表控件的事件。根据方法签名,我假设您的图表控件名为chData,因此您可以在表单的构造函数中使用以下代码:

chData.MouseWheel += new EventHandler(chData_MouseWheel);

当然,您也可以在设计时将处理程序与事件相关联。为此,请使用属性窗口并单击工具栏中的闪电以切换到“事件”视图。然后找到该MouseWheel事件,单击下拉箭头,然后选择您的处理程序方法的签名。这将导致设计人员将上述代码写入表单的代码隐藏文件中。

除此之外,您的代码中有一个巨大的危险信号:一个空catch块。如果您没有处理异常或对它做任何事情,那么您不应该捕获它。这不是口袋妖怪,抓到它们没有任何奖励。

于 2013-07-22T12:47:03.580 回答