当鼠标按住单元格时,如何在 DataGridView 中维护选定的行?

2024-02-07

我正在尝试在 DataGridView 中实现行移动。我希望能够选择多行并单击任何选定行的单元格以开始拖动操作。问题是当我将鼠标放在单元格上时,行会被取消选择。我怎样才能防止这种情况发生?


通过快速的谷歌搜索,this http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/9c38740d-be4a-4d50-99ef-1ac4c8c48d92似乎是自定义行拖放的解决方案。请注意,我刚刚从链接页面中删除了以下代码,我无法保证其有效性。

private Rectangle dragBoxFromMouseDown;
private int rowIndexFromMouseDown;
private int rowIndexOfItemUnderMouseToDrop;

private void dataGridView1_MouseMove(object sender, MouseEventArgs e)
{
    if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
    {
        // If the mouse moves outside the rectangle, start the drag.
        if (dragBoxFromMouseDown != Rectangle.Empty &&
            !dragBoxFromMouseDown.Contains(e.X, e.Y))
        {
            // Proceed with the drag and drop, passing in the list item.                    
            DragDropEffects dropEffect = dataGridView1.DoDragDrop(dataGridView1.Rows[rowIndexFromMouseDown], DragDropEffects.Move);
        }
    }
}

private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
{
    // Get the index of the item the mouse is below.
    rowIndexFromMouseDown = dataGridView1.HitTest(e.X, e.Y).RowIndex;

    if (rowIndexFromMouseDown != -1)
    {
        // Remember the point where the mouse down occurred. 
        // The DragSize indicates the size that the mouse can move 
        // before a drag event should be started.                
        Size dragSize = SystemInformation.DragSize;
        // Create a rectangle using the DragSize, with the mouse position being
        // at the center of the rectangle.
        dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragSize.Width / 2), e.Y - (dragSize.Height / 2)), dragSize);
    }
    else
    {
        // Reset the rectangle if the mouse is not over an item in the ListBox.
        dragBoxFromMouseDown = Rectangle.Empty;
    }
}

private void dataGridView1_DragOver(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.Move;
}

private void dataGridView1_DragDrop(object sender, DragEventArgs e)
{
    // The mouse locations are relative to the screen, so they must be 
    // converted to client coordinates.
    Point clientPoint = dataGridView1.PointToClient(new Point(e.X, e.Y));
    // Get the row index of the item the mouse is below. 
    rowIndexOfItemUnderMouseToDrop = dataGridView1.HitTest(clientPoint.X, clientPoint.Y).RowIndex;
    // If the drag operation was a move then remove and insert the row.
    if (e.Effect== DragDropEffects.Move)
    {
        DataGridViewRow rowToMove = e.Data.GetData(typeof(DataGridViewRow)) as DataGridViewRow;
        dataGridView1.Rows.RemoveAt(rowIndexFromMouseDown);
        dataGridView1.Rows.Insert(rowIndexOfItemUnderMouseToDrop, rowToMove);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当鼠标按住单元格时,如何在 DataGridView 中维护选定的行? 的相关文章

  • 如何验证文件名称在 Windows 中是否有效?

    是否有一个 Windows API 函数可以将字符串值传递给该函数 该函数将返回一个指示文件名是否有效的值 我需要验证文件名是否有效 并且我正在寻找一种简单的方法来完成此操作 而无需重新发明轮子 我正在直接使用 C 但针对的是 Win32
  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 将数组向左或向右旋转一定数量的位置,复杂度为 o(n)

    我想编写一个程序 根据用户的输入 正 gt 负 include
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke

随机推荐

  • C# httpwebrequest 和 javascript

    我正在使用 C HttpWebRequest 来获取网页的一些数据 问题是一些数据在页面加载后使用 javascript ajax 更新 但我没有在响应字符串中获取它 有没有办法让网络请求等待页面中的所有脚本执行完毕 Thanks Amit
  • React Native:包解析错误

    当我尝试使用以下命令生成发行版本时 cd android gradlew assembleRelease 目录下会生成一个apk文件 app build outputs apk app release unsigned apk 不幸的是 当
  • NextJS 中的环境变量未定义

    我正在使用next auth需要使用环境变量的库如下 Providers GitHub clientId process env GITHUB ID clientSecret process env GITHUB SECRET 然而 当我测
  • Google Play 显示的 API 级别错误

    在 Google Play 中上传我的 APK 后 它会显示在 APK 详细信息中 API 级别 14 17 并在 Play 商店中公开展示 4 0 及更高版本 虽然我以前的版本有 API 级别 14 但我更改了我的应用程序并设置了以下 m
  • 在 C++ 中不使用字段名称打印实例化结构的值

    我可以做吗 例如 考虑以下结构 struct bag string fruit string book string money 我想以顺序形式打印结构包实例的字段值并获得如下输出 apple Computer Networking A t
  • fps - 如何将计数除以时间函数来确定 fps

    我有一个计数器可以计算每一帧 我想要做的是将其除以时间来确定程序的 FPS 但我不确定如何在 python 中对计时函数执行操作 我尝试过将时间初始化为 fps time time time fps time float time time
  • 如何让PHP输出声音(嘟嘟声)?

    这个 python 代码的 PHP 版本是什么 import winsound winsound Beep 537 2000 php主要用在网络服务器上 所以在那里发出嘟嘟声有什么用 并且你不能通过php在用户计算机上发出嘟嘟声 因为php
  • 为什么 Unity 和 C# 开发工具包扩展会给出不正确/多余的警告?

    我正在使用 Visual Studio Code 用 C for Unity 编写脚本 不幸的是 我有多余的警告 解决这些警告会导致我的项目失败 我主要谈论的是 IDE0051 删除未使用的私有成员 对于函数 Start 和 Update
  • 正则表达式获取大括号之间的字符串

    我想问一下C 中的正则表达式 我有一根绳子 ex 欢迎来到 stackoverflow 这是一个 C 问题 关于正则表达式获取 之间内容的任何想法 我想要得到 2 个字符串 欢迎来到 stackoverflow 这是一个 C 问题 和 st
  • 如何在 Chrome 中为 Selenium 设置假地理位置

    如何在 Chrome 中为 Selenium 设置假地理位置 尝试使用 locationcontext 和下面的 Javascript 但它似乎不起作用 我已经尝试过这里的解决方案 Chrome 自动化中的假地理位置 https stack
  • 使用 LESS 及其 @import 时的 CSS 冗余

    我真的很喜欢这个想法和概念LESS http lesscss org 然而我偶然发现了一个错误 我很早就向作者报告了该错误 但尚未得到任何反馈 也许只有我做错了事 My application less 与此类似的文件 import res
  • jsgrid 多个自定义控制按钮?

    我想添加多个自定义控制按钮 以便我可以向按钮添加自定义单击事件 我遇到的问题是仅显示删除按钮 我希望每行都显示编辑和删除按钮 我有以下代码
  • Android 上的 1dip 形状线(边框)模糊

    这是我的应用程序的屏幕截图 它取自Samsung Galaxy Note 10 1 mdpi 149 ppi 我的客户认为底部按钮周围的边框线和上面的圆角矩形是模糊的 我使用形状作为背景 如下所示
  • 将数据通过管道传输到需要 TTY(终端)的 Linux 程序

    我在 Linux 中有一个程序 如果它的 stdin stdout 不是 TTY 终端设备 它就拒绝运行 是否有一个易于使用的工具可以创建 PTY 使用新创建的 TTY 启动程序 并通过 stdin stdout 复制所有数据 该用例不是交
  • 按后退按钮时会重新创建列表视图片段

    我正在使用装载机ListView片段 按下 后退 按钮即可重新创建它 你能告诉我如何处理这种情况吗 这是我的ListView片段代码 这里我有一个布尔变量 我将其设置为true单击列表项时 但一旦按下后退按钮onCreateView将被调用
  • Oracle SELECT 前 10 条记录 [重复]

    这个问题在这里已经有答案了 我在 Oracle 中的 SQL 语句有一个大问题 我想选择按 STORAGE DB 排序的前 10 条记录 这些记录不在其他 select 语句的列表中 这适用于所有记录 SELECT DISTINCT APP
  • 应用内购买 - 存储/获取用户购买历史记录 | iOS系统

    我正在开发一个应用程序 该应用程序将允许用户使用应用程序内购买购买新的级别 功能 据我所知 根据我的研究 我可以通过传递一组 ProductIds 使用 SKProductsRequest 从 iTunesConnect 获取应用内购买产品
  • 种子实体和用户、角色?

    如何播种用户 角色和应用程序特定实体 看起来好像 IdentityModel 的目标是它自己的 Context internal sealed class Configuration DbMigrationsConfiguration
  • 从 JPA Query.getResultList() 到自定义 TO 的映射列表

    我有一个表水果 有四列 id 名称 颜色 形状 表中的条目为 1 apple red round 2 banana yellow long 3 tomato red round 4 orange orange round 现在我制作了一个实
  • 当鼠标按住单元格时,如何在 DataGridView 中维护选定的行?

    我正在尝试在 DataGridView 中实现行移动 我希望能够选择多行并单击任何选定行的单元格以开始拖动操作 问题是当我将鼠标放在单元格上时 行会被取消选择 我怎样才能防止这种情况发生 通过快速的谷歌搜索 this http social