首页 程序笔记 datagridview右键没有数据的地方不显示contextMenuStrip

datagridview右键没有数据的地方不显示contextMenuStrip

在Winform中,可以使用下面的代码为DataGridView绑定右键菜单:

this.dataGridView1.ContextMenuStrip = contextMenuStrip2;

但是实际使用中发现如果DataGridView还没有绑定数据,界面是空白的时候右键也会显示菜单。那么怎么样才能在datagridview右键没有数据的地方不显示contextMenuStrip呢?

网上查了很多做法,都是在dataGridView1_MouseDown或者dataGridView1_CellMouseDown事件中根据当前点击RowIndex是否大于0来判断有没有右键点击到数据行。例如下面的代码,实际上是不生效的,点击了空白部分仍然会显示菜单。

private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                // 获取右键点击的单元格坐标
                DataGridView.HitTestInfo hit = dataGridView1.HitTest(e.X, e.Y);

                // 如果点击的位置不在有效的单元格范围内,则不显示菜单
                if (hit.RowIndex == -1 || hit.ColumnIndex == -1)
                {
                    dataGridView1.ContextMenuStrip?.Hide();
                }
            }

        }

正确的做法是使用 ContextMenuStrip 的 Opening 事件,在该事件中判断是否点击数据上,如果不是就通过设置e.Cancel = true来取消 ContextMenuStrip 的显示:

private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
    Point mousePos = dataGridView1.PointToClient(Control.MousePosition);
    DataGridView.HitTestInfo hitTest = dataGridView1.HitTest(mousePos.X, mousePos.Y);

    if (hitTest.Type == DataGridViewHitTestType.None)
    {
        e.Cancel = true; // 取消 ContextMenuStrip 的显示
    }
}
3

站心网

在Winform中,可以使用下面的代码为DataGridView绑定右键菜单: this.dataGridView1.ContextMenuStrip = co..

为您推荐

如果单表数据量大,只能考虑分库分表吗?

程序员最怕啥?不是需求改八遍,也不是半夜报警电话,而是数据库突然卡成PPT!尤其是当单表数据冲到几千万行,查询慢得像老牛拉车,这时候团队第一反应往往是:“赶紧分库分表!”但兄弟,分库分表可不是什么温柔小..

实时数据的处理一致性如何保证?

实时数据一致性的定义以及面临的挑战数据一致性通常指的是数据在整个系统或多个系统中保持准确、可靠和同步的状态。在实时数据处理中,一致性包括但不限于数据的准确性、完整性、时效性和顺序性。下图是典型的实时/..

关于大数据的一些真知灼见

大数据很强大,但还是有很多人仍然不知道它到底是什么。让我们来学习大数据的真实表现,以及如何更好地促进企业转型。或许我们经常听到有人讲大数据,但仍然有很多人不知道它到底是什么。因为我确信它很强大,所以我..

.net环境下跨进程、高频率读写数据

一、需求背景1、最近项目要求高频次地读写数据,数据量也不是很大,多表总共加起来在百万条上下。单表最大的也在25万左右,历史数据表因为不涉及所以不用考虑,难点在于这个规模的热点数据,变化非常频繁。数据来源..

工作中人们常提到的数据预处理,说的到底是什么?

数据预处理一方面是为了提高数据的质量,另一方面也是为了适应所做数据分析的软件或者方法。在做数据分析时,我想许多数据分析师会像《R语言实战第二版》的作者卡巴科弗那样发出感叹:“数据分析师在数据预处理上花..

mysql随机获取一条或者多条数据

语句一:select * from users order by rand() LIMIT 1MYSQL手册里面针对RAND()的提示大概意思就是,在 ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描,导致效率相当相当的低,效率不行,切..

多语言网站数据库文章表设计

设计一个支持多语言的网站数据库时,应该确保内容能够方便地扩展和管理。以下是多语言数据库表设计的关键原则和示例:设计原则分离内容与语言:将与语言相关的内容独立存储,不直接硬编码到主要表中。每个支持多语言..

ASP.NET 使用Entity Framework (EF) 创建迁移修改SQLite数据库表结构

在 ASP.NET 中,使用 Entity Framework (EF) 创建并连接 SQLite 数据库是一种轻量级、高效的数据库管理方式。以下是详细步骤:安装必要的 NuGet 包安装EntityFrameworkCore.Sqlite包:Install-Package Microsoft.Ent..

Mysql查询一段时间内的数据

select * from wap_content where week(created_at) = week(now)如果你要严格要求是某一年的,那可以这样查询一天:select * from table where to_days(column_time) = to_days(now());select * from table where da..

SocketException: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

SocketException: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 这个错误通常表示客户端在尝试连接到服务器时,服务器没有及时响应,导致连接超时。以下是一些可能的原因和解决方法:可..

SQLite性能支持多少数据量?

SQLite是一种轻量级的关系型数据库管理系统,广泛应用于移动应用、嵌入式系统和小型桌面应用程序中。由于其零配置、自给自足的特性,SQLite在很多场景下非常受欢迎。然而,对于许多开发者来说,一个常见的问题是:SQ..

Sylvan.Data.Excel 性能优异的开源.NET Excel数据读取库

Sylvan.Data.Excel是一个开源、免费、跨平台的.NET库,专注于读取和写入Excel数据文件。支持多种文件格式,并提供高效的数据访问和数据绑定功能。该库在.NET生态系统中是读取Excel数据文件的最快且内存分配最低的库..

使用shields.io来实时显示GitHub项目star、watch和fork的数量

如何获取GitHub repo实时的star,watch和fork数量呢?这里推荐一个Shields.io工具,可以实时生成GitHub徽章,同时显示star数。显示效果如下:什么是 Shields.io?Shields.io 是一个开源项目,用于生成各种类型的徽章..

HTQL 提取和查询HTML和XML数据的轻量级查询语言

HTQL(Hyper-Text Query Language)是一种用于提取和查询HTML和XML数据的轻量级查询语言。HTQL提供类似SQL的语法,可以方便地从网页或其他基于标签的文档中提取结构化数据,而无需解析整个文档。这使得它在爬虫、数..

使用ADO.NET连接到南大通用GBase 8s数据库

南大通用GBase 8s数据库广泛应用于各种企业级应用中,对于开发者而言,掌握如何使用ADO.NET连接到GBase 8s数据库非常重要。本文将详细阐述如何通过ADO.NET方式连接到南大通用GBase 8s数据库,并进行基本的数据库操作..

MySQL 5.x和MySQL 8.x数据库的区别

MySQL 是开源关系型数据库的代表,广泛应用于不同规模的 Web 和企业应用中。从 MySQL 5.x 到 MySQL 8.x 的升级带来了大量功能改进和性能提升。为了帮助大家更直观地理解两者的区别,本文将通过详细介绍并结合实际的 ..

Redis 同步、击穿、穿透及雪崩简述

对Redis最常见的几个问题,简要的说下我的理解与解决方法。数据同步指Redis做为缓存,在数据变化时,怎么保持与数据库数据同步的。一般解决方案为:缓存双删(同步方案大都采用删除缓存,而不会更新新缓存。缓存击穿..

数据库SQL Server2014和SQL Server2019的区别和如何选择?

SQL Server 2014和SQL Server 2019是微软公司发布的两个版本的数据库管理系统,它们在性能、安全性以及可扩展性等方面各有特点。在选择这两个数据库版本时,需要根据系统需求、预算状况以及技术团队的熟悉程度等因素..

解决.NET JAVA PHP中写入及读取memcache中数据不一致的方法

解决.NET JAVA PHP中写入及读取memcache中数据不一致的方法。公司部分接口使用PHP开发,部分接口使用.NET开放,.NET使用redis,PHP使用memcache作为分布式缓存服务器,但是部分业务需要.NET读取memcache里的数据。m..

money型的值输出后有四位小数,怎么只显示两位

SqlServer里有个类型是Money型,这个类型从数据库取出来后显示在页面上是小数点后四位的。 如价格23.0000元。 这样显示很难的,直接tostring也不行,还是会显示四位小数点。 可以通过string.Format("{0:F}",val)的..

发表回复

返回顶部

微信分享

微信分享二维码

扫描二维码分享到微信或朋友圈

链接已复制