Cómo encontrar un toolstripitem basado en su nombre de una variable y, a continuación, cambie el valor activado de

0

Pregunta

Tengo un ContextMenuStrip llamado: DGVContextStrip su muestra cuando el usuario hace clic en mi datagridview.

Que MenuStrip contiene un elemento llamado AddUpgradeTagToolStripMenuItem que contiene subtemas(dropdownitems), estos elementos son los nombres con un número en su nombre. por ejemplo: Add1ToolStripMenuItem, Add2ToolStripMenuItem, Add3ToolStripMenuItem.... y así sucesivamente hasta que Add25ToolStripMenuItem.

Cuando un usuario hace clic, en el Datagridview, quiero comprobar si una celda contiene el número "1", entonces si se hace Add1ToolStripItem.checked = true

Pensé que sería un bucle a través de los números del 1 al 25, y en cada bucle de comprobar si la celda contiene 1 y si es cierto, cambiar el valor activado el elemento de menú. algo así como...

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

pero esto no funciona, iv visto ejemplos en línea que utilizan el control.encontrar el método, pero no pude conseguir que funcione para mi uso. por ejemplo

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

alguna idea de cómo puedo conseguir que esto funcione? Me doy cuenta de que podría haber utilizado 25 if then else, pero quería mantener el código mucho más limpio.

1

Mejor respuesta

1

El ToolStripItem no es un control a la búsqueda de una en una Control.ControlCollection. Usted necesita para buscar un ToolStripItemCollection a donde pertenece.

Igual que el Control.ControlCollection.Find el método, la ToolStripItemCollection.Find método puede realizar una profunda búsqueda de un elemento.

Ejemplos para su caso:

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

Alternativamente, si usted ya sabe que el elemento de destino es uno de los AddUpgradeTagToolStripMenuItem desplegable de elementos, entonces usted puede hacer:

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

En caso de que usted necesita para comprobar solamente un elemento de la colección:

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

gracias , su primera opción trabajó para mí. En realidad, no podía conseguir la segunda opción para el trabajo, es simple no compilar cuenta que Visual Studio no reconocer cualquier error en el código, así que no estoy seguro de por qué no se compila.
Andy Andromeda

@AndyAndromeda eres bienvenido. En cuanto a la segunda opción del error, no sé. A mí me funciona.
dr.null

En otros idiomas

Esta página está en otros idiomas

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