返回
datagridview右键没有数据的地方不显示contextMenuStrip
2024-02-05 1643 0
在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 的显示
}
}
网友点评
提交
相关阅读
DataGridView右键删除行
.NET Exception: Received an unexpected EOF or 0 bytes from the transport stream.解决方法
Sql Server清空表并重置主键序号
优先的产品才是王道,HTML5不能代表一切
.NET 2024年就业前景如何?
.net和java程序哪个更占内存?
.NET C#实现自动关机
VSCode Insiders 与 VSCode:两者区别详解及使用建议
相关帖子
豆荚加速器不能用了?豆荚加速器跑路了?推荐完美替代 – DOVE加速器 评测
国内YouTube创作者如何赚钱?网络、提现与面临的挑战全解析
国外免费的云服务器推荐:轻松启用国际云端资源
UU 加速器深度测评:加速效果如何?是否值得购买?
aca & misakaf emby官方机场不能用了?aca & misakaf emby官方机场跑路了?推荐替代 – DOVE加速器
推荐五款适合国内用户使用的高速网络加速器机场,可用于TIKTOK等电商平台直播使用 - 免费试用
Switch硬破和软破的区别
VSCode开发.NET 创建文件报错 Failed with ExitCode(2097158)