我在c#中选择树视图中的节点文本时遇到困难, 想法是获取被点击的节点的文本, 但问题是,当我想像这样抓住它时
MessageBox.Show(treeView1.SelectedNode.Text);
所选节点是先前选中的,而不是我点击的实际节点,那么我怎么能 先选择我点击的节点,然后再抓取他的文字?我认为解决方案是在我获取文本之前调用原始的nodeclick处理程序,但我不知道如何调用它
答案 0 :(得分:8)
是的,当NodeMouseClick事件触发时,它尚未被选中。您应该使用AfterSelect事件。这确保了当用户使用键盘选择节点时它也可以工作。或者这样做:
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
Console.WriteLine(e.Node.Text);
}
但请注意,可以通过BeforeSelect取消选择。
答案 1 :(得分:3)
您可能正确地尝试访问SelectedNode
控件的TreeView
属性,然后单击的节点实际设置为已选中。但是,这里的答案不是自己调用事件(导致各种问题,通常是一种不好的做法)。
事实上,有一个更简单的解决方案。 NodeMouseClick
event传递了TreeNodeMouseClickEventArgs
的实例,其中显示了Node
property,表示刚刚点击的节点。
因此,您可以更改代码以只访问该属性:
void treeView1_NodeMouseClick(Object sender, TreeNodeMouseClickEventArgs e)
{
MessageBox.Show(e.Node.Text);
}
答案 2 :(得分:0)
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
treeView1.SelectedNode = e.Node;
}
答案 3 :(得分:0)
我使用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);
}