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

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,所以如果编码块则永远不会输入.

我的代码出了什么问题?

解决方法

我相信从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将有行索引

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...