Jak najít toolstripitem na základě jeho jména proměnné a pak změnit kontroluje hodnotu

0

Otázka

Mám ContextMenuStrip nazývá: DGVContextStrip její zobrazí, když uživatel klikne na můj datagridview.

Že MenuStrip obsahuje položku s názvem AddUpgradeTagToolStripMenuItem která obsahuje dílčí položky(dropdownitems), tyto položky jsou všechny pojmenované s číslem v jejich názvu. např: Add1ToolStripMenuItem, Add2ToolStripMenuItem, Add3ToolStripMenuItem.... a tak dále, dokud Add25ToolStripMenuItem.

Když uživatel klikne na Datagridview, chci zkontrolovat, zda buňka obsahuje číslo "1" a pak, když to dělá, aby Add1ToolStripItem.checked = true

Myslel jsem, že bych smyčka přes čísla od 1 do 25, a v každé smyčky zkontrolujte, zda buňka obsahuje 1 a pokud je to pravda, změna je kontrolována hodnota položka nabídky. něco jako...

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 nebude fungovat, iv viděli příklady on-line, které používají ovládací prvek.najít metodu, ale nemohla jsem se dostat do práce pro mé použití. například

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

nějaké nápady, jak bych si to do práce? Uvědomuji si, že jsem mohl použít 25 když pak ještě prohlášení, ale tak nějak jsem chtěl, aby kód mnohem krásnější.

1

Nejlepší odpověď

1

Na ToolStripItem není ovládání na hledání pro jeden v Control.ControlCollection. Musíte hledat ToolStripItemCollection tam, kde to patří.

Stejně jako Control.ControlCollection.Find metoda, ToolStripItemCollection.Find metoda se může provádět hluboké vyhledávání pro položky.

Příklady pro váš pří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

Případně, pokud již víte, že cílový objekt je jedním z AddUpgradeTagToolStripMenuItem rozbalovací položky, pak můžete udělat:

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 případě, že potřebujete zkontrolovat pouze jednu položku z kolekce:

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

děkuji , vaše první volba pro mě pracoval. Vlastně jsem se nemohl dostat druhou možnost pracovat, je to jednoduché nebude kompilovat myslí si Visual Studio nepoznal nějaké chyby v kódu, takže si nejsem jistý, proč by to nebylo sestavit.
Andy Andromeda

@AndyAndromeda Jste vítáni. Jako druhá možnost je chyba, nevím. Funguje to pro mě.
dr.null

V jiných jazycích

Tato stránka je v jiných jazycích

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