Comment trouver un toolstripitem basé sur son nom étant une variable, puis changer la valeur de

0

La question

J'ai un ContextMenuStrip appelé: DGVContextStrip son affiche lorsque l'utilisateur clique droit sur mon datagridview.

Que MenuStrip contient un élément appelé AddUpgradeTagToolStripMenuItem qui contient des sous-éléments(dropdownitems), ces sous-éléments sont tous nommés avec un numéro dans leur nom. par exemple: Add1ToolStripMenuItem, Add2ToolStripMenuItem, Add3ToolStripMenuItem.... et ainsi de suite jusqu'à Add25ToolStripMenuItem.

Lorsqu'un utilisateur clique droit sur le Datagridview, je veux vérifier si une cellule contient le nombre "1" alors si il ne font Add1ToolStripItem.checked = true

J'ai pensé que je voudrais faire une boucle par les numéros de 1 à 25, et dans chaque boucle de vérifier si la cellule contient 1 et si c'est vrai, changer la valeur de l'élément de menu. quelque chose comme...

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

mais cela ne fonctionne pas, iv vu des exemples en ligne qui utilisent le contrôle.trouver la méthode, mais je ne pouvais pas obtenir que cela fonctionne pour mon utilisation. par exemple

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

des idées comment je obtenir que cela fonctionne? Je me rends compte que je pouvais avoir utilisé 25 if then else, mais je voulais garder le code beaucoup plus lisible.

1

La meilleure réponse

1

L' ToolStripItem n'est pas un contrôle pour en chercher un dans un Control.ControlCollection. Vous avez besoin de chercher un ToolStripItemCollection là où il appartient.

Tout comme l' Control.ControlCollection.Find de la méthode, l' ToolStripItemCollection.Find méthode pouvez effectuer une recherche profonde d'un élément.

Des exemples pour votre cas:

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

Alternativement, si vous savez déjà que l'élément cible est l'un des AddUpgradeTagToolStripMenuItem liste déroulante des articles, alors vous pouvez faire:

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

Dans le cas où vous avez besoin de vérifier un seul élément de la collection:

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

je vous remercie , votre première option a fonctionné pour moi. En fait je ne pouvais pas obtenir la deuxième option, c'est simple ne serait pas de la compilation esprit vous Visual Studio n'a pas de reconnaître une erreur dans le code donc je ne sais pas pourquoi il ne serait pas à compiler.
Andy Andromeda

@AndyAndromeda Vous êtes les bienvenus. Comme pour la deuxième option est l'erreur, je ne sais pas. Il fonctionne pour moi.
dr.null

Dans d'autres langues

Cette page est dans d'autres langues

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