DataGridView 单元格、RowHeader 和 ColumnHeader 的不同 ContextMenuStrip

2023-11-25

我想设置不同ContextMenuStrip for DataGridView Cells, RowHeaders and ColumnHeaders.

这个想法是,当我右键单击这些项目中的任何一个时,会出现一个不同的ContextMenuStrip被展示。我该怎么做呢?


使用 DataGridView 的MouseDown事件来测试是否单击了鼠标右键,如果是,则使用关联的HitTestInfo属性来确定是否单击了单元格、行或列。使用此信息来显示您需要的 ContextMenuStrip。

这是一个例子MouseDown执行此操作的事件。要尝试该示例,请在表单上放置一个 DataGridView 和三个 ContentMenuStrip。将 ContentMenuStrip 命名为 mnuCell、mnuRow 和 mnuColumn。

Private Sub DataGridView1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown
    If e.Button = Windows.Forms.MouseButtons.Right Then
        Dim ht As DataGridView.HitTestInfo
        ht = Me.DataGridView1.HitTest(e.X, e.Y)
        If ht.Type = DataGridViewHitTestType.Cell Then
            DataGridView1.ContextMenuStrip = mnuCell
            mnuCell.Items(0).Text = String.Format("This is the cell at {0}, {1}", ht.ColumnIndex, ht.RowIndex)
        ElseIf ht.Type = DataGridViewHitTestType.RowHeader Then
            DataGridView1.ContextMenuStrip = mnuRow
            mnuRow.Items(0).Text = "This is row " + ht.RowIndex.ToString()
        ElseIf ht.Type = DataGridViewHitTestType.ColumnHeader Then
            DataGridView1.ContextMenuStrip = mnuColumn 
            mnuColumn.Items(0).Text = "This is col " + ht.ColumnIndex.ToString()
        End If
    End If
End Sub

这里,我将 DataGridView 的 ContextMenuStrip 属性分配给适合右键单击的项目(单元格、行或列)的 ContextMenuStrip。为了演示如何进一步自定义 ContextMenuStrips 的行为,我还在每个 ContentMenuStrips 的菜单项中设置文本。

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

DataGridView 单元格、RowHeader 和 ColumnHeader 的不同 ContextMenuStrip 的相关文章

  • C# winform 如何在按钮第二次单击时文本框变为空?

    在一个表单中 我有一个组 Box 其中包含带有 4 个选项卡的选项卡控件 在第二个选项卡中 我有一些文本框 在保存数据之前 我需要验证在这些文本框中输入的输入 请注意我的保存按钮位于最后一个选项卡中 以下测试场景有效 第一个文本框中的输入无
  • 非 Web 项目的 XML 序列化程序集

    我正在尝试解决 VS 2010 VB NET 和 C 中自动生成序列化程序集的众所周知的问题 项目设置中的 生成序列化程序集 选项对于非 Web 项目没有任何作用 请参阅http blog devstone com aaron archiv
  • 使用文本和进度条填充 DataGridView

    我正在创建一个多线程应用程序 其中每个线程将在我的应用程序中显示为一行DataGridView 我想要一个ProgressBar每行指示相应的线程进度 问题是 这可能吗 如果是这样 怎么办 我添加了类 DataGridView Progre
  • File.ReadAllLines 或流读取器

    我们可以使用以下方式读取文件StreamReader http msdn microsoft com en us library vstudio system io streamreader或通过使用File ReadAllLines ht
  • 如何在 C# 中从 sql server 运行代码 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions SqlCommand cmd new
  • DataGridView 行:半透明选择或选择上的行边框

    我有一个 DataGridView 其中每行的背景根据数据绑定项而不同 但是 当我选择一行时 我无法再看到它原来的背景颜色 为了解决这个问题 我想到了两个解决方案 我可以使选择半透明 从而可以查看两个选定的行是否具有不同的背景颜色 或者 我
  • WPF DataGrid 显示点而不是逗号

    在网上查找并寻找答案后没有结果 我想向您寻求帮助 我有一个包含 2 列的 SQL 数据库表 浮点数据类型 例如 1 2 1 3 1 4 等 绑定到一个DataGrid XAML 代码
  • DataGridView小数不排序

    好吧 我有一个 DataGridView 它的数据绑定如下 dataGridViewChartOre AutoGenerateColumns false dataGridViewChartOre DataSource xml GetOreC
  • AllowUserToAddRows 不适用于 DataGridView 上的 List<> 数据源

    我有一个DataGridView与DataSource set to List
  • WinForm面板滚动没有滚动条?

    我正在创建一个基本上是一个面板的用户控件 内部有随机内容 并且我需要能够使用按钮 向上和向下 而不是滚动条来上下滚动该面板 我必须这样做的原因是因为该程序将在触摸屏显示器上使用 我们需要大按钮而不是丑陋的小滚动条 我一直在摆弄 Vertic
  • System.Linq.Dynamic 不支持 OrderByDescending("someColumn")?

    好的 在我们的项目中 我使用 System Linq Dynamic 库 但我刚刚注意到我无法执行以下操作 myDataSource OrderByDescending someColumnName 因为我收到以下错误 重载解析失败 因为无
  • 使用 C# 在 Windows 窗体应用程序中正确使用 OnClick 与 MouseClick 事件

    我目前正在开发一个自定义控件 并意识到我的代码正在运行两次 这实际上并不是一个大问题 它只是 Focus 方法调用 不过 我想了解一下 从阅读点击 MSDN说明单击事件 http msdn microsoft com en us libra
  • VB.Net 中的文件比较

    我需要知道两个文件是否相同 起初我比较了文件大小和创建时间戳 但这不够可靠 我想出了下面的代码 似乎可行 但我希望有人有更好 更简单或更快的方法 基本上我正在做的是将文件内容流式传输到字节数组 并通过 System Security Cry
  • .net 应用程序中的内存泄漏

    我正在 VB net 2005 中开发一个桌面应用程序 该应用程序包含一个间隔为 1 分钟的计时器 每次计时器计时 就会执行一组函数 大部分与数据库相关 最初 应用程序运行良好 在进程 任务管理器 中 每次调用计时器时 CPU 使用率都会达
  • 您是否必须在 VB.NET 中显式创建表单实例? [复制]

    这个问题在这里已经有答案了 如果一个项目包含Form类 形式可以通过以下方式显示 Form1 Show 或者是否需要首先创建表单的实例 Dim frm As New Form1 frm Show 正如所建议的 使用表单名称使用默认实例 而第
  • 文本框中“结束编辑”的事件

    我正在 winform c 中使用文本框 并使用文本在数据库中进行查询 但每次文本更改时 我都需要不断查阅文本框的文本 因此 对于这些 我使用 KeyUp 但这个活动太慢了 文本框编辑完成后是否会触发任何事件 我考虑完成2个条件 控制失去焦
  • 如何选择一个按钮作为表单的默认按钮

    我有一个表单 它接受用户输入 然后让用户连接到 SQL Server This is happening on Button Click But where can I set the property Default button so
  • 从 DataGridViewSelectedRowCollection 复制列详细信息

    我有一个 DataGridView 它绑定到一个由设计时未知的 SQL 查询返回的 DataSet 好吧 我知道查询是什么 我只是不知道用户选择了哪一个 我允许用户从表中选择一组行并单击 确定 按钮 然后我想将这些行复制到新的 DataGr
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调

随机推荐