Como posso controlar caixas de seleção em um .Net Forms.TreeView?
Pergunta
Eu tenho um aplicativo de desktop .Net com TreeView como um dos elementos da interface do usuário.
Quero poder selecionar várias vezes esse TreeView, só que isso não é compatível.
Então, estou adicionando caixas de seleção à árvore. Meu problema é que apenas alguns itens são selecionáveis, e aqueles que não o são, não podem fazer seleções em cascata de forma consistente.
Existe alguma maneira de desabilitar ou ocultar algumas caixas de seleção enquanto exibe outras?
Solução
O comportamento padrão do TreeView é que quando o Caixas de seleção propriedade for definida como verdadeira, as caixas de seleção serão mostradas para todos os TreeNodes.
O comportamento que você está procurando - desabilitar ou ocultar algumas caixas de seleção - é uma modificação personalizada do comportamento normal.Você pode criar uma implementação personalizada de TreeView ou TreeNode que substitua o comportamento padrão.Outra coisa a tentar seria usar o TreeView.StateImageList propriedade.Alguns sites para conferir mais informações:
- Ver esta postagem aos fóruns do MSDN que passam por uma implementação semelhante à que você está tentando.
- Projeto de código: TreeView Tri-Estado
- Projeto de código: Como lidar com imagens de estado de nó personalizadas em um TreeView (por exemplo,caixas de seleção tristate)
Outras dicas
Tive um problema muito semelhante em um editor que escrevi recentemente.No final, usei o TreeNode
de BackColor
propriedade para determinar o estado de seleção do nó.Eu então escrevi um manipulador para o SelectionChanged
evento que verificou o estado das teclas Shift/Control para determinar se o nó selecionado estava sendo adicionado/removido da seleção ou criando uma nova seleção.Houve também um Generic::List<>
dos nós que foram selecionados atualmente para eliminar quaisquer pesquisas em árvore.
Por que o .NET não tem uma visualização em árvore multisselecionada?Existem tantos usos para um e ativar as caixas de seleção na visualização em árvore é uma alternativa muito ruim.