получить текст нажатого узла древовидной формы C # winforms - PullRequest
0 голосов
/ 24 декабря 2010

У меня проблемы с выделением текста узла в древовидной структуре в c #, идея состоит в том, чтобы получить текст выбранного узла, но проблема в том, что когда я хочу схватить его вот так

MessageBox.Show(treeView1.SelectedNode.Text);

выбранный узел является предыдущим выбранным, а не фактическим, на который я нажимаю, так как я могу сначала выберите узел, на который я нажимаю, а затем захватите его текст? я думаю, что решение - это вызвать оригинальный обработчик nodeclick, прежде чем я получу текст, но я не знаю, как его вызвать

Ответы [ 4 ]

8 голосов
/ 24 декабря 2010

Да, он еще не выбран, когда происходит событие NodeMouseClick. Вместо этого вы должны использовать событие AfterSelect. Это гарантирует, что это также работает, когда пользователь использует клавиатуру для выбора узла. Или сделайте это так:

    private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
        Console.WriteLine(e.Node.Text);
    }

Но учтите, что выбор может быть отменен с помощью BeforeSelect.

3 голосов
/ 24 декабря 2010

Вы правы, предполагая, что вы, вероятно, пытаетесь получить доступ к свойству SelectedNode элемента управления TreeView до того, как выбранный узел фактически будет выбран. Однако ответ здесь не в том, чтобы называть событие самостоятельно (это вызывает всевозможные проблемы и, как правило, является плохой практикой).

На самом деле, есть гораздо более простое решение. Событие NodeMouseClick проходит в экземпляре TreeNodeMouseClickEventArgs, который предоставляет свойство Node , указывающее на узел, который был только что нажат .

Таким образом, вы можете изменить свой код, чтобы просто получить доступ к этому свойству:

void treeView1_NodeMouseClick(Object sender, TreeNodeMouseClickEventArgs e)
{
    MessageBox.Show(e.Node.Text);
}
0 голосов
/ 24 декабря 2010

Я использую событие AfterSelect и кнопку с событием Clicked для отображения текста выбранного узла, и он отлично работает:

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) {
  Console.WriteLine(e.Node.Text);
}

private void button1_Click(object sender, EventArgs e) {
  Console.WriteLine(treeView1.SelectedNode.Text);
}
0 голосов
/ 24 декабря 2010
 private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
 {
    treeView1.SelectedNode = e.Node;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...