Pergunta

Eu estou usando o evento clique no TreeView para fazer algumas coisas quando um nó é clicado no TreeView. Eu faço isso por obter o nó que é clicar sobre chamando GetNodeAt () com as coordenadas do mouse, como este:

private void TreeView_Click(object sender, System.EventArgs e)
{
    MouseEventArgs mouseEventArgs = e as MouseEventArgs;

    if (mouseEventArgs == null)
        return;

    // Get the node that is being clicked.                  
    TreeNode node = this.GetNodeAt(mouseEventArgs.X, mouseEventArgs.Y);

    // Do other stuff...
}

No entanto, o método GetNodeAt () só funciona quando o clique é na etiqueta nó, quando a imagem nó é clicado, em seguida, GetNodeAt () retorna null. Este é um pouco irritante desde o nó é realmente selecionado quando a imagem é clicada, mas não consigo descobrir o que o nó é.

Do Alguém tem alguma sugestão?

Atualizado: Eu recebi algumas sugestões para uso SelectedNode vez. Eu não posso, pois do conjunto após o evento Click é acionado. Isso realmente em um controle que herda TreeView eo que ele faz é fogo o seu próprio evento Clicked mas com os dados subjacentes que o TreeNode representa em vez da própria TreeNode.

Atualizado: Acontece que alguém tinha substituído o método GetNodeAt () em nosso código que introduziu este comportamento, que eu não percebi. Então a questão é nula e sem efeito e não há nenhum problema com o método GetNodeAt (). Por que alguém faria isso permanece um mistério. :)

Foi útil?

Solução

Você já tentou os BeforeSelect ou AfterSelect Eventos? Você pode obter o nó selecionado diretamente das TreeViewCancelEventArgs, em seguida, usá-lo em seu evento Click.

Edit: Pensamento adicionais:. O único problema que eu posso ver com isto é que o evento BeforeSelect realmente incêndios após o clique e clique de mouse eventos

Outro Edit:. Se você precisar de um evento que é acionado antes Click, você pode usar NodeMouseClick - TreeNodeMouseClickEventArgs tem uma propriedade Node

Outras dicas

Por que não usar TreeView.SelectedNode?

Tente:

TreeNode node = this.SelectedNode;

EDIT: batido para o soco por Sean

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top