2009-12-02 27 views
3
void dataGridView1_DragDrop(object sender, DragEventArgs e) 
    { 
     object data = e.Data.GetData(typeof(string)); 

     MessageBox.Show(e.X + " " + e.Y + " " + dataGridView1.HitTest(e.X, e.Y).RowIndex.ToString()); 

     if (dataGridView1.HitTest(e.X, e.Y).Type == DataGridViewHitTestType.Cell) 
     { 
      MessageBox.Show("!"); 
     } 

    } 

如果我嘗試用上述測試代碼將項目拖到datagridview中,我會從data.ToString()收到正確的數據,但我無法定位行或單元格。如何從DragDrop事件定位datagridview行或單元格?

RowIndex.ToString()返回「-1」,並且我的if語句返回false,因此如果編碼塊不輸入,則返回false。

我的代碼有什麼問題?

+0

我認爲我們將需要更多的信息。我可以猜測HitTest試圖做什麼,但我們可以看到代碼? – womp 2009-12-02 19:49:55

+0

你需要哪些代碼的其他部分? – Dave 2009-12-02 19:54:17

+0

我只想讓它返回拖放結束的行,這樣我就可以使用從列表視圖中拖動的字符串填充該行中的單元格。 – Dave 2009-12-02 19:58:56

回答

12

我相信從DragAndDrop傳遞的座標是屏幕空間座標。 我認爲你需要將點投射到客戶端座標空間。

Point dscreen = new Point(e.X, e.Y); 
Point dclient = dataGridView1.PointToClient(dscreen); 
DataGridView.HitTestInfo hitTest = dataGridView1.HitTest(dclient.X,dclient.Y); 

然後hitTest.Row將有行索引

+0

工作了一種享受!我會查找我對PointToClient等做的感謝 – Dave 2009-12-02 20:04:40

相關問題