Cum de a găsi un toolstripitem bazat pe numele său fiind o variabilă și apoi modificați valoarea verificate de ea

0

Problema

Am o ContextMenuStrip numit: DGVContextStrip sale afișat atunci când utilizatorul dreptul de clicuri pe datagridview.

Care MenuStrip conține un element numit AddUpgradeTagToolStripMenuItem care conține sub-elemente(dropdownitems), sub aceste produse sunt denumite cu un număr în numele lor. de exemplu: Add1ToolStripMenuItem, Add2ToolStripMenuItem, Add3ToolStripMenuItem.... și așa mai departe până Add25ToolStripMenuItem.

Atunci când un utilizator click-uri dreapta, pe Datagridview, vreau pentru a verifica dacă o celulă conține numărul "1" apoi, dacă aceasta nu face Add1ToolStripItem.checked = true

M-am gândit că mi-ar bucla prin numerele de la 1 la 25, și în fiecare buclă a verifica dacă celula conține 1 și dacă este adevărat, schimba verificat valoare de element de meniu. ceva de genul...

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

dar acest lucru nu funcționează, a iv-a văzut exemple on-line care folosesc sistemul de control.găsi metoda dar nu am putut obține pentru a lucra pentru utilizarea mea. de exemplu

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

orice idei cum am obține acest lucru? Îmi dau seama că mi-ar fi folosit 25 dacă atunci altceva declarații, dar am vrut să păstrați codul mult mai ordonat.

1

Cel mai bun răspuns

1

La ToolStripItem nu este o comandă de căutare pentru unul într-o Control.ControlCollection. Aveți nevoie pentru a căuta un ToolStripItemCollection în cazul în care acesta face parte.

Doar ca Control.ControlCollection.Find metoda, ToolStripItemCollection.Find metodă puteți efectua o căutare profundă pentru un element.

Exemple pentru cazul dumneavoastră:

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

Alternativ, dacă știți deja că obiectivul este unul dintre cele AddUpgradeTagToolStripMenuItem drop jos elemente, atunci puteți face:

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

În cazul în care aveți nevoie pentru a verifica doar un singur element din colecție:

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

multumesc , prima opțiune a lucrat pentru mine. De fapt, am putut obține a doua opțiune de a lucra, este simplu, nu ar compila tine minte Visual Studio nu recunoaște nici o eroare in cod așa că nu sunt sigur de ce n-ar compila.
Andy Andromeda

@AndyAndromeda esti binevenit. Ca pentru cea de-a doua opțiune este o eroare, nu stiu. Acesta funcționează pentru mine.
dr.null

În alte limbi

Această pagină este în alte limbi

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