如何找到一个。根据它的名字被一个变量,然后改变检查价值

0

的问题

我有一个数字显示称为: DGVContextStrip 它显示用户正确的点击我的条件.

那"菜单条"包含一项称为 AddUpgradeTagToolStripMenuItem 其中包含的分项目(dropdownitems),这些子项目都是名为与一些在他们的名字。 例如: Add1ToolStripMenuItem, Add2ToolStripMenuItem, Add3ToolStripMenuItem.... 等等,直到 Add25ToolStripMenuItem.

当用户权利的点击,在条件下,我要检查,如果一个细胞中含有的数字"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

但是,这并不工作,iv看到的例子网络使用的控制。找到方法,但我没得到这工作我的使用。 例如

Dim ControlName As String = "Add" & i & "ToolStripMenuItem"
CType(Me.Controls.Find(ControlName, True), ToolStripMenuItem).Checked = True

任何想法,我怎么得到这个工作吗? 我意识到我可以用25如果那人发言,但我希望保持代码远更整洁。

1

最好的答案

1

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
2021-11-12 18:27:29

谢谢你,你的第一个选项,为我工作。 我实际上不可能获得的第二项工作,它简要汇编不介意你Visual Studio不认识任何错误的代码所以我不知道为什么它不会编译。
Andy Andromeda

@AndyAndromeda你是受欢迎的。 至于第二个选择是错误的,我不知道。 这对我的作品。
dr.null

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................