C# DataGridView 在右键单击位置打开上下文菜单

2023-12-31

我已经环顾了一段时间,试图找到一个可行的解决方案,但我想问一个问题:

我的应用程序中的对话框表单中有一个 DataGridView,我希望右键单击单元格时显示一个 ContextMenu。

我右键单击,ContextMenu 看起来很好,但是无论我在 StackExchange 上尝试什么解决方案,它总是会偏移很多。

这与表单和/或其父项有关吗?或者我只是愚蠢地错过了一些东西?

谢谢 杰米

Form.cs

private void dataGridContents_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        if (e.RowIndex > -1 && e.ColumnIndex > -1)
        {
            Debug.WriteLine("Cell right clicked!");

            DataGridViewCell cell = (sender as DataGridView)[e.ColumnIndex, e.RowIndex];

            contextCell.Show(cell.DataGridView, PointToClient(Cursor.Position));

            if (!cell.Selected)
            {
                cell.DataGridView.ClearSelection();
                cell.DataGridView.CurrentCell = cell;
                cell.Selected = true;
            }
        }
    }
}

Edit

抱歉,我已经尝试过:

  • new Point(e.X, e.Y)
  • new Point(e.Location.X, e.Location.Y)
  • new Point(MousePosition.X, MousePosition.Y)
  • PointToClient(e.X, e.Y)
  • new Point(Cursor.Position.X, Cursor.Position.Y)
  • Control.MousePosition
  • Cursor.Position

可能还有其他一些。

Edit 2

这就是我所说的偏移的意思 - 一些解决方案会导致此偏移在一定程度上变化(有些非常远等) - 但所有解决方案都会像实际光标一样进行偏移。

Edit 3

My contextCell is a new ContextMenu()


选项1:显示行上下文菜单的最简单解决方案是将上下文菜单分配给RowTemplate.ContextMenuStripDataGridView 的属性:

dataGridView1.RowTemplate.ContextMenuStrip = contextMenuStrip1;

选项2:另外,如果您想在显示之前选择单元格ContextMenuStrip,足以处理CellContextMenuStripNeeded event:

private void dataGridView1_CellContextMenuStripNeeded(object sender,
    DataGridViewCellContextMenuStripNeededEventArgs e)
{
    if (e.RowIndex > -1 && e.ColumnIndex > -1)
    {
        dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
        e.ContextMenuStrip = contextMenuStrip1;
    }
}

你犯了什么错?

您正在计算鼠标在DataGridView以错误的方式。您正在使用PointToClient意思是this.PointToClient,而你需要使用的方法DataGridView, 例如dataGridView1.PointToClient:

myContextMenu.Show(dataGridView1,dataGridView1.PointToClient(Cursor.Position));

仅供您参考,您可以简单地显示ContextMenu使用此代码,无需使用ContextMenuStrip.

但我强烈建议你使用ContextMenuStrip.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# DataGridView 在右键单击位置打开上下文菜单 的相关文章

  • CMake 找不到请求的 Boost 库

    既然我已经浏览了其他人的解决方案几个小时 但找不到适合我的问题的正确答案 我想将我的具体问题带给您 我正在尝试使用 CMake 构建 vsomeip 为此 我之前构建了 boost 1 55 但是 我在 CMake 中收到以下错误 The
  • 有没有办法在 xcode 上使用 c++0x ?我想使用 gcc 4.4 或更高版本

    我想使用 gcc 4 4 或更高版本进行 iphone 开发 有人知道怎么做吗 不 你不知道 相信我 你不会 Apple 仍保留 gcc 4 2 1 因为 4 2 2 及更高版本使用 GPLv3 这意味着他们必须放弃对其平台的控制 对于 i
  • 检测wlan是否关闭

    任何人都可以给我一个提示 如何在 Windows Phone 上以编程方式检测 C 8 1 应用程序 不是 8 0 是否启用 禁用 WLAN 我不想更改这些设置 只是需要知道 该解决方案是一个 Windows 8 1 通用应用程序 Wind
  • 检测到堆栈崩溃

    我正在执行我的 a out 文件 执行后 程序运行一段时间 然后退出并显示消息 stack smashing detected a out terminated Backtrace lib tls i686 cmov libc so 6 f
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • 访问 ascx 文件中的母版页控件

    我有一个母版页文件 其中包含 2 个面板控件中的 2 个菜单 我还使用控件来检查用户是否登录并获取用户类型 根据我想要显示 隐藏面板的类型 控件本身不在母版页中引用 而是通过 CMS 系统动态引用 我想在用户控件中使用findcontrol
  • 使用查询表达式对 List 进行排序

    我在使用 Linq 订购这样的结构时遇到问题 public class Person public int ID get set public List
  • 搜索实体的所有字段

    我正在尝试在客户数据库上实现 多功能框 类型的搜索 其中单个查询应尝试匹配客户的任何属性 这是一些示例数据来说明我想要实现的目标 FirstName LastName PhoneNumber ZipCode Mary Jane 12345
  • 如何使用 NPOI 按地址(A1、A2)获取 Excel 单元格值

    我有一个 Excel 单元格地址 例如 A1 A2 如何使用 C 中的 NPOI 框架以编程方式访问此单元格 我找到的一些 Java POI 示例代码 CellReference cr new CellReference A1 row my
  • Project Euler #8,我不明白我哪里出了问题[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在做项目欧拉第八题 https projecteuler net problem 8 其中我得到了这个大得离谱的数字 7316
  • 英文日期差异

    接近重复 如何计算相对时间 https stackoverflow com questions 11 how do i calculate relative time 如何在 C 中计算某人的年龄 https stackoverflow c
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • ASP.NET MVC 路由:如何从 URL 中省略“索引”

    我有一个名为 StuffController 的控制器 具有无参数索引操作 我希望从表单中的 URL 调用此操作mysite com stuff 我的控制器定义为 public class StuffController BaseContr
  • 在 C#.NET 中安全删除文件

    在我正在做的一个项目中 我想为用户提供 安全 删除文件的选项 例如 用随机位或 0 覆盖它 在 C NET 中是否有一种简单的方法可以做到这一点 效果如何 你可以调用系统内部删除 http technet microsoft com en
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • C++ 中 void(*)() 和 void(&)() 之间的区别[重复]

    这个问题在这里已经有答案了 在此示例代码中 func1是类型void int double and funky是类型void int double include
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • 来自 3rd 方库的链接器错误 LNK2019

    我正在将旧的 vc 6 0 应用程序移植到 vs2005 我收到以下链接器错误 我花了几天时间试图找到解决方案 错误LNK2019 无法解析的外部符号 imp 创建AwnService 52 在函数 public int thiscall
  • 如何使用placement new重新初始化该字段?

    我的课程包含字段 private OrderUpdate curOrderUpdate 我一遍又一遍地使用它 经常需要重新初始化 for int i 0 i lt entries size i auto entry entries i ne

随机推荐

  • 如何处理D3中多层嵌套的数据?

    我有以下数据结构 key a values key a0 values key a00 values key a01 values key a1 values key b values 我
  • 当一个值与其他值不同时,SQL Server

    我有这个表的表结构prices CREATE TABLE prices id int priceFrom int priceUp int INSERT INTO prices id priceFrom priceUp VALUES 1 23
  • Swift 枚举不等式

    我已经习惯了能够治疗enums 作为数值 因此使用像这样的运算符 gt lt 对于大多数枚举用途来说 这可能不是必需的 但有一种情况是这样的 objc public enum MyState Int case Loading 0 case
  • 没有 Angular-cli“localhost:4200”的 Access-Control-Allow-Origin

    我有一个与 CORS 和所需标头相关的问题 Setup我运行一个 Angular 项目和 Angular cli localhost 4200 我想通过 HTTP 请求从 WebService 访问 JSON 当我直接在浏览器中使用 URL
  • 在 Selenium 中测试后处理网络错误

    问题 我在 C 中搜索了很多解决方案 但没有一个适合我 我无法使用它们 因为缺少无法导入的对象或这些对象已被弃用 例如所需的能力 我想做的事 我想做的就是在执行测试后 检查测试过程中是否出现问题 当出现问题时 测试应该失败并显示消息 断言
  • Flash:同一页面上有许多相同的 SWF

    Summary 我正在尝试制作一个包含多个相同 SWF 的网页 我遇到的问题是加载速度太慢 不过下载时间还不错 我的每个单元格中有一个 4x4 表格 iframe 中嵌入了一个 swf 文件 注 4 X 4 表 gt 16 SWFS 我的
  • SparkR 作业 100 分钟超时

    我编写了一个有点复杂的sparkR脚本并使用spark submit运行它 脚本基本上做的是逐行读取基于 hive impala parquet 的大表 并生成具有相同行数的新 parquet 文件 但似乎工作在大约 100 分钟后停止 这
  • 在 Windows 上安装 SQLite3 for Ruby - 目前最简单的方法是什么?

    我是 Ruby 新手 希望让 Redmine 在 WinServer08 sp1 上运行 我在这里阅读了一些主题 详细介绍了让 Ruby 和 SQLite 相互兼容所需的步骤和解决方法 Ruby 将运行 sqlite3 的 dll 和 ap
  • 如何始终在 RowsFragment 中显示标题

    我正在尝试创建一个类似于 Youtube 应用程序的 Android 电视应用程序 我正在使用Sofa https github com dextorer Sofa库来做到这一点 现在 当我尝试显示中各个项目的标题时 问题就出现了RowsF
  • travis-lint:为什么它抱怨 java 语言字段

    我有这个非常简单的 travis yml https github com emeraldjava emeraldjava blob master travis yml对于一个java项目 当我对文件运行 travis lint 时会抱怨
  • 如何捕获 Observable.forkJoin(...) 中的错误?

    I use Observable forkJoin 在两个 HTTP 调用完成后处理响应 但如果其中任何一个返回错误 我该如何捕获该错误 Observable forkJoin this http post
  • 尽管 useTable = false,CakePHP 仍要求模型表

    我正在创建一个联系表单以将电子邮件发送到指定地址 我正在尝试利用 CakePHP 模型验证 并且由于我不需要联系人模型的表 因此我在联系人模型中将 useTable 设置为 false 然而 我在执行发送的控制器函数中遇到错误 错误是 缺少
  • Qucikblox 错误:[错误的身份验证数据] 在 Android 中登录 Twitter

    我已经集成了Quickblox SDK V2 2 5在我的 Android 应用程序中使用Social Integration Twitter但它会抛出错误 errors 错误的身份验证数据 以下是我的代码 If in the below
  • Oracle和PostgreSQL中的Write Skew异常不回滚事务

    我注意到 Oracle 和 PostgreSQL 中都发生了以下情况 考虑到我们有以下数据库架构 create table post id int8 not null title varchar 255 version int4 not n
  • FMU FMI模拟,设置某类参数时不修改结果

    我为该示例开发了一个基于 MSL 流体库的简单 Modelica 模型 我将 MassFlowSource 与管道和 Boundary PT 连接为接收器功能 如下图所示 http www casimages com img php i 1
  • 如何从各种未知的数字类型转换为双精度[重复]

    这个问题在这里已经有答案了 我的代码将从各种来源获取各种数字类型的大量数据 这些数据全部作为类型到达object 为了便于使用 我想将其全部转换为double 这足以表示输入数据的全部范围 并且不需要极高的精度 我当然能够解决这个问题 但我
  • 使第二行的弹性项目占据容器的剩余高度

    我正在尝试创建一个布局 顶部有标题 下面有侧边栏和主要内容 我想让侧边栏和内容视图占据标题留下的垂直空间 问题是标题可以动态调整大小 所以我无法执行calc 我的解决方案是使用弹性盒方案 我将视口水平分成两部分 一个是标题 一个是侧边栏和主
  • 无法从池中获取资源(SocketTimeoutException:)

    我正在运行多个工作线程 大约 10 个 来访问来自 redis Q 的数据 对于我正在使用无限超时杰迪斯客户端 Jedis jedis pool getResource jedis getClient setTimeoutInfinite
  • PHP表单验证(不知道如何将其拆分在两个不同的页面中)

    我正在用 PHP 编写联系表单 我对 PHP 的了解几乎是不存在的 我已经尝试了一段时间将 HTML 表单提交到 PHP 表单 以验证其文本字段并在空白时为必填项 但无法让任何内容发挥作用 我也不知道AJAX 否则我会尝试这样做 因此 我们
  • C# DataGridView 在右键单击位置打开上下文菜单

    我已经环顾了一段时间 试图找到一个可行的解决方案 但我想问一个问题 我的应用程序中的对话框表单中有一个 DataGridView 我希望右键单击单元格时显示一个 ContextMenu 我右键单击 ContextMenu 看起来很好 但是无