日期:2014-05-19  浏览次数:21024 次

太奇怪了,聚焦的问题
窗口的左边有几个TREENODE,右边是PANEL.在PANEL   上有几个TEXTBOX.我希望点击左边的TREENODE,光标显示在右边对应的TEXTBOX上.我重写了ONENTER   和ONLEAVE的事件.可是为什么在ONENTER   中是正确的聚焦点,但是随即又进入了ONLEAVE的事件,取消了聚焦.我找了一天也没找到那里发出的取消事件.
帮帮忙吧

------解决方案--------------------
跟重写textbox事件没有关系,是treeview的原因,假如你在treeview的nodeclick或者mouseup或者某个事件中,写了textbox.focus()的代码,系统也执行了这些代码,所以onenter触发了,但是由于treeview的机制,这些代码执行后有继续执行了treeview的代码,触发treeview的事件,所以textbox的焦点自然就失去了
------解决方案--------------------
什么叫聚焦?!焦点
你点击TreeView的结点,把焦点给TextBox,这个时候TreeView的节点肯定会触发Leave事件哈,你要写Leave事件干什么?
------解决方案--------------------
使用异步的代码可以参考下面的代码(仅供参考):
delegate void somedele();
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
somedele d = new somedele(this.setFocus);
this.BeginInvoke(d);
}
private void setFocus()
{
this.textBox1.Focus();
}