vb.net - 如何根据名称作为变量查找工具条,然后更改它的检查值
问题描述
我有一个 ContextMenuStrip 调用:DGVContextStrip
当用户右键单击我的 datagridview 时显示它。
该 MenuStrip 包含一个名为的项目AddUpgradeTagToolStripMenuItem
,该项目包含子项目 (dropdownitems),这些子项目都以名称中的数字命名。例如:Add1ToolStripMenuItem
, Add2ToolStripMenuItem
, Add3ToolStripMenuItem
.... 等等,直到Add25ToolStripMenuItem
。
当用户在 Datagridview 上单击鼠标右键时,我想检查一个单元格是否包含数字“1”,然后如果它确实Add1ToolStripItem.checked = true
我想我会遍历数字 1 到 25,并在每个循环中检查单元格是否包含 1,如果为真,则更改菜单项的选中值。就像是...
For i = 1 to 25
If DataGridView1.SelectedRows(0).Cells("Text_Field").Value.ToString.Contains(i) then
CType("Add" & i & "ToolStripMenuItem", ToolStripMenuItem).Checked = True
Next
但这不起作用,我在网上看到了使用 control.find 方法的示例,但我无法让它为我的使用工作。例如
Dim ControlName As String = "Add" & i & "ToolStripMenuItem"
CType(Me.Controls.Find(ControlName, True), ToolStripMenuItem).Checked = True
任何想法我如何让它工作?我意识到我可以使用 25 个 if then else 语句,但我有点想让代码更整洁。
解决方案
不是在ToolStripItem
中搜索一个的控件Control.ControlCollection
。您需要搜索ToolStripItemCollection
它所属的位置。
就像该Control.ControlCollection.Find
方法一样,该ToolStripItemCollection.Find
方法可以对项目执行深度搜索。
您的案例示例:
Dim itemName As String = $"Add{i}ToolStripMenuItem"
Dim tsmi = yourContextMenuStrip.Items.
Find(itemName, True).
OfType(Of ToolStripMenuItem).
FirstOrDefault()
If tsmi IsNot Nothing Then
tsmi.Checked = True
End If
或者,如果您已经知道目标项目是AddUpgradeTagToolStripMenuItem
下拉项目之一,那么您可以执行以下操作:
Dim itemName As String = $"Add{i}ToolStripMenuItem"
Dim tsmi = DirectCast(AddUpgradeTagToolStripMenuItem, ToolStripMenuItem).
DropDownItems.OfType(Of ToolStripMenuItem).
FirstOrDefault(Function(x) x.Name.Equals(itemName, StringComparison.OrdinalIgnoreCase))
If tsmi IsNot Nothing Then
tsmi.Checked = True
End If
如果您只需要检查集合中的一项:
Dim itemName As String = $"Add{i}ToolStripMenuItem"
For Each tsmi In DirectCast(AddUpgradeTagToolStripMenuItem, ToolStripMenuItem).
DropDownItems.OfType(Of ToolStripMenuItem)
If tsmi.Name.Equals(itemName, StringComparison.OrdinalIgnoreCase) Then
tsmi.Checked = True
Else
tsmi.Checked = False
End If
Next
推荐阅读
- python-2.7 - 如何从具有不同长度和公共列的不同数据帧创建字典?
- rule-engine - 使用 PostgreSQL 创建 ProcessEngine 时出现异常
- azure-service-fabric - 访问 Service Fabric 中的无状态 Web 服务 api
- excel - 调用子程序的输出不正确
- python-3.x - Docker Flask 应用程序多次加载图像
- python - 创建非对称多维数组
- python - 为什么 QChart 对象的滚动方法不起作用
- python - 大写输入的正确格式是什么?
- c++ - C++ 代码是否只能针对特定的 CPU 架构进行编译。有没有办法将它编译到所有架构
- php - 如何在 PHP 中使用 json 解码访问多维数组中的对象?