2013-07-22 25 views
2

我要放大圖表「System.EventArgs」不包含定義「位置」

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); 
} 

它不承認「位置」,並給出了這個錯誤。

+0

在哪個活動你有這個代碼? – Steve

+7

錯誤是相當自我解釋的。 'e'的類型是'EventArgs',它沒有一個名爲'Location'的屬性。您可能會附上錯誤的事件。 – CodingIntrigue

+1

您可以發佈該功能的簽名'public void OnZoom(EventAgrs e)'包含您在.cs文件中使用的任何命名空間?基本上,您在該方法中使用的EventArgs類型不包含名爲'Location'的屬性,這意味着正在使用錯誤的類型。 –

回答

4

該錯誤消息是正確的。 EventArgs類是您通過參數e訪問的實例,不包含Location屬性。

不幸的是,這就是您在Click事件中得到的全部內容。您需要切換到處理MouseClick事件,而將MouseEventArgs對象傳遞給Location屬性。這很簡單,只需要更新處理程序方法的名稱和將處理程序附加到事件的代碼(可能位於設計器生成的代碼隱藏文件中)。

或者,您可以使用Cursor.Current屬性檢索鼠標指針的當前位置。這往往是「足夠好」,但千萬記住幾件事情:

  1. Click事件不響應鼠標事件只是提出,而且在其他一些情況下,當控制就好重點和用戶按輸入鍵。在這些情況下,鼠標指針的當前位置可能完全沒有意義。

    這就是爲什麼MouseClick事件是更好的選擇。它不僅爲您提供免費的位置信息,而且它的只有響應鼠標事件引發,此時Location屬性纔有意義。

  2. 用戶可能已移動時生成的Click事件的時間和事件處理程序執行,這意味着Cursor.Current返回不同的位置,其中用戶最初點擊的時間之間的鼠標。在大多數情況下,這不是一個很大的距離,但它可能是。

+2

有幫助,但應該是一個評論。 –

+0

@新我不同意,它確實回答了我們提供的問題。現在有更多的信息,我已經更新了一些。請注意,原始答案仍然準確。 –