(winform中)关于 treeview中 checkbox 单选问题。
要求: 点中treeview中的一个checkbox 其他选中的checkbox改为不选
private void UNcheckAllNode(System.Windows.Forms.TreeNodeCollection nodes)
{
foreach(System.Windows.Forms.TreeNode tn in nodes)
{
tn.Checked =false;
UNcheckAllNode(tn.Nodes);
}
}
我的这个事件要在 AfterCheck以后使用
private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
UNcheckAllNode(treeView1.Nodes);
if (e.Node.Checked )
{
Loadresdata(e.Node.Tag.ToString());
//adddata(e.Node);
}
else
{
deletresdata(e.Node.Tag.ToString());
}
}
结果是 保错未处理的“System.StackOverflowException”类型的异常出现在 system.windows.forms.dll
好像是 溢出了 哪位有什么好办法解决!!
------解决方案--------------------AfterCheck中调用的方法UNcheckAllNode(treeView1.Nodes)多次触发AfterCheck事件,在这里你应该对事件进行判断,AfterCheck事件是由鼠标还是键盘还是其它途径触发的,只有在由鼠标触发的时候,才调用UNcheckAllNode(treeView1.Nodes)及其它方法
private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
if(e.Action==TreeViewAction.ByMouse)
{
UNcheckAllNode(treeView1.Nodes);
if (e.Node.Checked )
{
Loadresdata(e.Node.Tag.ToString());
//adddata(e.Node);
}
else
{
deletresdata(e.Node.Tag.ToString());
}
}
}