2

我想放大图表

 private void toolStripButtonZoom_Click(object sender, System.EventArgs e)
{
    double posXStart = chartMain.ChartAreas[0].AxisX.PixelPositionToValue(e.Location.X) - (xMax - xMin) / 0.5;
    double posXFinish = chartMain.ChartAreas[0].AxisX.PixelPositionToValue(e.Location.X) + (xMax - xMin) / 0.5;
    double posYStart = chartMain.ChartAreas[0].AxisY.PixelPositionToValue(e.Location.Y) - (yMax - yMin) / 0.5;
    double posYFinish = chartMain.ChartAreas[0].AxisY.PixelPositionToValue(e.Location.Y) + (yMax - yMin) / 0.5;

    chartMain.ChartAreas[0].AxisX.ScaleView.Zoom(posXStart, posXFinish);
    chartMain.ChartAreas[0].AxisY.ScaleView.Zoom(posYStart, posYFinish);
}

它无法识别“位置”并给出此错误。

4

1 回答 1

4

该错误消息是正确的。该类EventArgs是您通过e参数访问的实例,它不包含Location属性。

不幸的是,这就是你从Click活动中得到的全部。您需要切换到处理MouseClick事件,它传递一个MouseEventArgs具有Location属性的对象。这很简单,您只需要更新处理程序方法的名称和将处理程序附加到事件的代码(可能位于设计器生成的代码隐藏文件中)。

或者,您可以使用该Cursor.Current属性检索鼠标指针的当前位置。这通常“足够好”,但请记住以下几点:

  1. Click事件不仅会在响应鼠标事件时引发,而且在某些其他情况下也会引发,例如当控件获得焦点并且用户按下Enter键时。在这些情况下,鼠标指针的当前位置可能完全没有意义。

    这就是为什么MouseClick事件是一个更好的选择。它不仅免费为您提供位置信息,而且Location在该属性有意义时才响应鼠标事件而引发。

  2. 用户可能在Click事件生成时间和事件处理程序执行时间之间移动了鼠标,这意味着Cursor.Current返回的位置与用户最初单击的位置不同。在大多数情况下,这不是一个重要的距离,但它可能是。

于 2013-07-22T12:21:34.157 回答