我目前用TreeView的Afterselected事件处理我的逻辑,问题是程序点击一个节点后再次点击该节点无响应,必须点完其他节点再回过头来点这个节点才能执行到Afterselected里的程序,如果在这个函数内部执行完我的程序将这个TreeView的SelectedNode设为null(C#)或nullptr(C++)的话,是可以连续点击同一个树节点的,但出现了一个奇怪的现象,当treeview所在窗体失去交点后,交点又回到该窗体,会自动选择树当前所见的第一个节点上,不管你鼠标有没有点击该节点,这个问题怎么去解决?
TreeView TV = new TreeView();
public Form1()
{
InitializeComponent(); TV.Parent = this;
TV.Nodes.Add("1", "1").Nodes.Add("2", "2");
TV.MouseClick += new MouseEventHandler(TV_MouseClick);
} void TV_MouseClick(object sender, MouseEventArgs e)
{
MessageBox.Show(TV.GetNodeAt(e.Location).Text);
}
设置 TreeView的SelectedNode 本身触发了Afterselected事件我原来也是这么想的,但是试验了一下发现设置SelectedNode=null后不会触发Afterselected事件回复 ASDFY
不设置SelectedNode=null,连续两次点击在处理AfterSelect事件第二次是不能执行Afterselect的,这就有问题了,比如我在窗体中还有一些按钮或check控制树的逻辑处理,改变这些按钮后,第二次按同一个按钮就会出现不同的逻辑处理,问题是现在这样点第二次根本就不会执行AfterSelect事件回复wartim:
但在程序外要经常得到树节点的Select状态和其它值,并且mouse——click我们也有其他的处理
mouseDown(object sender, MouseEventArgs e)
{
TreeNode node = treeView.GetChildAtPoint(e.X, e.Y);
}