Como encontrar um toolstripitem com base em seu nome de uma variável e, em seguida, altere o valor marcado de

0

Pergunta

Eu tenho um ContextMenuStrip chamado: DGVContextStrip sua exibido quando o direito de usuário clica no meu datagridview.

Que MenuStrip contém um item chamado AddUpgradeTagToolStripMenuItem que contém sub-itens(dropdownitems), estas sub-itens são nomeados com um número no nome. por exemplo: Add1ToolStripMenuItem, Add2ToolStripMenuItem, Add3ToolStripMenuItem.... e assim por diante, até Add25ToolStripMenuItem.

Quando um utilizador direito de cliques, no Datagridview, eu quero verificar se uma célula contém o número "1", em seguida, se faz a Add1ToolStripItem.checked = true

Eu percebi que eu iria loop através de números de 1 a 25, e em cada ciclo verifique se a célula que contém a 1 e se for verdade, alterar o valor marcado o item de menu. algo 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

mas isso não funciona, iv, vi exemplos on-line que usa o controle.método de localização, mas eu não podia ter que trabalhar para meu uso. por exemplo

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

alguma idéia de como eu chegar a este trabalho? Eu sei que eu poderia ter usado 25 se, em seguida, else, mas eu meio que queria manter o código muito mais simples.

1

Melhor resposta

1

O ToolStripItem não é um controle para procurar um em um Control.ControlCollection. Você precisa procurar um ToolStripItemCollection onde ele pertence.

Assim como o Control.ControlCollection.Find método, o ToolStripItemCollection.Find o método pode realizar uma profunda pesquisa para um item.

Exemplos para o seu 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

Como alternativa, se você já sabe que o item de destino é um dos AddUpgradeTagToolStripMenuItem suspensa itens, então você pode fazer:

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

No caso de você precisar de seleção apenas um item da coleção:

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

obrigado , sua primeira opção funcionou para mim. Na verdade, eu não poderia começar a segunda opção para o trabalho, é simples não seria compilar mente do Visual Studio não reconhece qualquer erro no código, então eu não sei por que ele não vai compilar.
Andy Andromeda

@AndyAndromeda Você é bem-vindo. Quanto à segunda opção do erro, eu não sei. Ele trabalha para mim.
dr.null

Em outros idiomas

Esta página está em outros idiomas

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