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()
收到正确的数据,但我无法定位行或单元格。
RowIndex.ToString()
返回“-1”,我的if语句返回false,所以如果编码块则永远不会输入。
我的代码出了什么问题?
答案 0 :(得分: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
将拥有行索引