当TreeView.SelectedNode为空时,TreeView的 AfterSelect事件被触发
我刚在学习C#,在一个WinForms项目中处理TreeView时遇到困难。根据MSDN,当树节点未被选中时,TreeView.AfterSelect 事件不会发生:
我发现它确实会发生。在一个简单的WinForms项目中,只有一个TreeView控件和 TreeView.AfterSelect 事件——给定以下代码——会进入无限循环:
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace WinFormsAppTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// populate some nodes in treeview
TreeNode rootNode = new TreeNode();
rootNode.Text = "Colors1";
treeView1.Nodes.Add(rootNode);
TreeNode childNode = new TreeNode();
childNode.Text = "Red";
rootNode.Nodes.Add(childNode);
childNode = new TreeNode();
childNode.Text = "Yellow";
rootNode.Nodes.Add(childNode);
childNode = new TreeNode();
childNode.Text = "Green";
rootNode.Nodes.Add(childNode);
rootNode = new TreeNode();
rootNode.Text = "Colors2";
treeView1.Nodes.Add(rootNode);
childNode = new TreeNode();
childNode.Text = "Black";
rootNode.Nodes.Add(childNode);
childNode = new TreeNode();
childNode.Text = "Blue";
rootNode.Nodes.Add(childNode);
childNode = new TreeNode();
childNode.Text = "White";
rootNode.Nodes.Add(childNode);
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
test();
}
private void test()
{
treeView1.SelectedNode = null;
}
}
}
如果我把断点放在 treeView1.SelectedNode = null; 上,这就是我的完整测试程序。
我会得到一个无限循环。唯一能让它停止的方法是点击TreeView,但不能点在某个节点上。
解决方案
只有在你放置普通断点时才会发生这种情况,因为触发断点会改变焦点并触发额外的事件。尝试改用动作断点。你可以用它向输出窗口打印内容,这样就不会产生无限循环。
示例输出窗口:
Selected node: {Text = "Node0"}
Selected node: {Text = "Node0"}
Selected node: {Text = "Node4"}
Selected node: {Text = "Node10"}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。
