各位大虾请发表看法, TreeView事件是不是设计的有问题??

rock1981 2004-01-08 03:10:31
C#的WinForm下的程系中
我的窗体上有一个TreeView 控件 和一个TextBox控件
我要在TreeView 的节点被选择之前触发TextBox 的Validating事件。
现在问题是TextBox 的Validating事件在TreeView的AfterSelect 事件后才被触发。
这样合理吗??
以前VC中好像这种验证事件应该是在树节点的被选择之前触发。
各位说说看这种事件处理到底是怎样工作的???
...全文
81 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
linzsoft 2004-01-09
  • 打赏
  • 举报
回复
MS在设计控件的时候分把控件的激活情况分成了两个过程
Focus 和 Select

但是真正起焦点作用的是select,就是说只有当一个控件被select了,控件才是当前活动的,而Focus是为了表示控件为突出显示

你的问题可以这样理解:

当鼠标点击TreeView它获得了Focus,此时如果TreeView.SelectedNode变化了就会产生BeforeSelect事件,同时TextBox失去了Focus。
但是TextBox还是活动的,所以没有产生 Validating事件。

由于没有处理BeforeSelect事件,跟着就产生AfterSelect事件,然后TextBox失去了焦点select,这时Validating事件产生,最后TreeView被select。

但是要注意AfterSelect实际上是更改了选择的Node之后产生事件
也就是说你进行了上述的操作之后,TreeView的TreeView.SelectedNode就变成你刚才点击的
Node,即使TreeView失去了焦点变成了非活动控件的时候,TreeView.SelectedNode也不会改变,除非你选择别的Node.

至于TextBox的Validating是在TreeView的AfterSelect后面执行这样的事件触发先后顺序合不合理,
只能说,C#处理事件的顺序,是按照代码执行的逻辑顺序进行的,可能和人为的想法不一致,按照你的想法一定是TextBox失去焦点然后TreeView再在改变的,
但是他们在实际逻辑是

1: TreeView.BeforeSelect
2: TreeView.AfterSelect
3: TextBox.Leave
4: TextBox.Validating
5: TreeView.Enter
rock1981 2004-01-09
  • 打赏
  • 举报
回复
TO:linzsoft(邪邪)
在treeView1_AfterSelect之前(treeView1_BeforeSelect)手动的控制,让他强制执行验证
方法固然可以。但也不是最佳。^_^!我觉得合理的应该是先Validating后AfterSelect
我想知道的是为什么TextBox 的Validating是在TreeView的AfterSelect后面执行
这样的事件触发先后顺序合不合理?????????????
linzsoft 2004-01-08
  • 打赏
  • 举报
回复
为什么不行,你想在哪里触发就在哪里调用Validating的触发函数了。

private void treeView1_BeforeSelect(object sender, System.Windows.Forms.TreeViewCancelEventArgs e)
{
this.textBox1_Validating(this.textBox1,new System.ComponentModel.CancelEventArgs());
}

private void textBox1_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
this.textBox1.Text = "dddd4";
}
yangzhenhai 2004-01-08
  • 打赏
  • 举报
回复
竟然很多控件没有ing事件!
rock1981 2004-01-08
  • 打赏
  • 举报
回复
事件是死的,人是活的>>>>>
这个我也知道。
我是想知道这样设计事件的本意何在,或者说这是个Bug??
白掌柜 2004-01-08
  • 打赏
  • 举报
回复
我猜想可能是因为Validating要在TextBox失去焦点以后才能被触发。
事件是死的,人是活的,可以用别的方法来验证。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧