2010-02-24 129 views
4

我正在實現一個應用程序,可以在面板中拖放圖像,所以我想確保圖像放置在面板內,並且在放下時可以看到整個圖像。在這種情況下,我想獲得當我做拖放事件時的當前光標位置。那麼我怎樣才能獲得與面板相關的光標位置呢? 以下是面板拖動事件的方法。我們怎樣才能得到相對於窗體的位置?

private void panel1_DragDrop(object sender, DragEventArgs e) 
{ 
    Control c = e.Data.GetData(e.Data.GetFormats()[0]) as Control; 

    if (c != null) 
    { 
     if (e.X < 429 && e.X > 0 && e.Y<430 && e.Y>0) 
     { 
      c.Location = this.panel1.PointToClient((new Point(e.X, e.Y)));** 

      this.panel1.Controls.Add(c); 
     } 
    } 
} 
+0

是否需要panel1.TopLevelControl.PointToClient() - 即使用表單? – 2010-02-24 13:59:14

+0

添加了我的意思的例子 – 2010-02-25 14:12:39

回答

3

您可以使用Cursor.Position獲取光標座標,這將獲得您的屏幕座標。那麼你可以傳遞到這些PointToClient(Point p)

Point screenCoords = Cursor.Position; 
Point controlRelatedCoords = this.panel1.PointToClient(screenCoords); 

雖然,我相當肯定,DragEventArgs.XDragEventArgs.Y已經是屏幕座標。你的問題可能在於

if (e.X < 429 && e.X > 0 && e.Y<430 && e.Y>0) 

這看起來像它會被檢查,對面板座標,而e.Xe.Y是在這一點上屏幕座標。相反,在檢查邊界之前將它變形爲面板座標:

Point screenCoords = Cursor.Position; 
Point controlRelatedCoords = this.panel1.PointToClient(screenCoords); 
if (controlRelatedCoords.X < 429 && controlRelatedCoords.X > 0 && 
    controlRelatedCoords.Y < 430 && controlRelatedCoords.Y > 0) 
{ 

} 
+0

但是在這種情況下,有些情況下拖動的圖像的一部分可能在面板的邊框處不可見。因爲可以在面板中的任何位置指向光標。例如:當光標指向幾乎靠近邊界時。 這就是爲什麼我要檢查面板邊框上的拖動點。 有沒有解決方法? – Dinu 2010-02-25 11:23:23