Ako nájsť toolstripitem na základe jeho meno je premenná, a potom zmeňte skontrolovať hodnotu

0

Otázka

Mám ContextMenuStrip s názvom: DGVContextStrip jeho zobrazí, keď používateľ právo kliknutí na moje datagridview.

Že MenuStrip obsahuje položku s názvom AddUpgradeTagToolStripMenuItem ktoré obsahuje sub položky(dropdownitems), tieto čiastkové položky sú všetky pomenované s číslom v názve. napr.: Add1ToolStripMenuItem, Add2ToolStripMenuItem, Add3ToolStripMenuItem.... a tak ďalej, až kým Add25ToolStripMenuItem.

Keď používateľ právo kliknutí na Datagridview, chcem skontrolovať, ak bunka obsahuje číslo "1" potom, ak sa to robí Add1ToolStripItem.checked = true

Myslel som, ja by som slučky cez čísla od 1 do 25 rokov, a v každej slučky skontrolujte, či bunka obsahuje 1 a ak je to pravda, zmeniť skontrolovať hodnotu položky menu. niečo ako...

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

ale to nefunguje, iv vidieť príklady online, ktoré pomocou kontroly.nájsť spôsob, ale nemohol som si, že pracovať pre vlastné použitie. napríklad

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

akékoľvek nápady, ako som si to do práce? Viem, mohla som použiť 25 ak potom ešte závierke, ale som trochu chcel, aby kód oveľa krajší.

1

Najlepšiu odpoveď

1

Na ToolStripItem nie je kontrola na vyhľadávanie v Control.ControlCollection. Potrebujete, ak chcete vyhĺadať ToolStripItemCollection tam, kde patrí.

Rovnako ako Control.ControlCollection.Find metódy, ToolStripItemCollection.Find postup môžete vykonať hlboké hľadanie položky.

Príklady pre prípad:

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

Prípadne, ak vás už vedia, že cieľovej položke je jedným z AddUpgradeTagToolStripMenuItem drop-down položky, potom môžete robiť:

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

V prípade, že potrebujete na kontrolu iba jednu položku z kolekcie:

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

ďakujem vám , vaša prvá možnosť pracoval pre mňa. Vlastne som sa nemohol dostať druhú možnosť pracovať, je to jednoduché nebude zostavovať nezabúdajme Visual Studio neuznávajúcim akékoľvek chyby v kóde, takže som si nie istý, prečo to by sa zostaviť.
Andy Andromeda

@AndyAndromeda Ste vítaní. Ako druhá možnosť je chyba, neviem. Funguje to pre mňa.
dr.null

V iných jazykoch

Táto stránka je v iných jazykoch

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