C# 如何从DragDrop事件中定位datagridview行或单元格?

C# 如何从DragDrop事件中定位datagridview行或单元格?,c#,datagridview,C#,Datagridview,如果我尝试使用上述测试代码将项目拖动到datagridview,我将从data.ToString()ok中收到正确的数据,但我无法将行或单元格作为目标 RowIndex.ToString()返回“-1”,我的if语句返回false,因此从不进入if编码块 我的代码怎么了?我相信从DragAndDrop传递的坐标是屏幕空间坐标。 我认为您需要将点投射到客户坐标空间 void dataGridView1_DragDrop(object sender, DragEventArgs e) {

如果我尝试使用上述测试代码将项目拖动到datagridview,我将从
data.ToString()
ok中收到正确的数据,但我无法将行或单元格作为目标

RowIndex.ToString()
返回“-1”,我的if语句返回false,因此从不进入if编码块


我的代码怎么了?

我相信从DragAndDrop传递的坐标是屏幕空间坐标。 我认为您需要将点投射到客户坐标空间

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("!");
        }

    }

然后,
hitTest.Row
将有Row索引

我想我们需要更多信息。我能猜到HitTest想做什么,但是我们能看到代码吗?你还需要代码的哪一部分?我只想让它返回拖放结束的行,这样我就可以用从listview拖动的字符串填充该行中的单元格。@womp:HitTest是.Net中的标准方法,控件根据位置返回对象信息,通常通过鼠标单击或拖动来返回,如本例所示。看,我请客了!我会查一下我用PointToClient等做了什么谢谢
Point dscreen = new Point(e.X, e.Y);
Point dclient = dataGridView1.PointToClient(dscreen );
DataGridView.HitTestInfo hitTest = dataGridView1.HitTest(dclient.X,dclient.Y);