vb.net容器内控件的校验问题

zhwdai 2019-04-15 07:03:31
Form中有一个TextBox,在Validating中有校验。
还有两个Button,一个是关闭按钮,CauseValidation=False,一个是保存按钮,CauseValidation=True。

当这两个按钮和TextBox在同一个容器中,先点击关闭按钮,不会触发校验,再点击保存按钮,会触发TextBox的校验。
当两个按钮在单独一个容器中(比如Panel),先点击关闭按钮,不会触发校验,再点击保存按钮,也不会触发TextBox的校验。
请教这是什么原因产生的?如果就要保持这种风格,应该怎样解决?谢谢
...全文
113 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhwdai 2019-04-16
  • 打赏
  • 举报
回复
谢谢回复。只能改变思路,将控件和容器分离,然后用容器覆盖控件,图层选择最底层。效果一样,但是控制上得改
stherix 2019-04-16
  • 打赏
  • 举报
回复
引用 4 楼 zhwdai 的回复:
[quote=引用 3 楼 stherix 的回复:] [quote=引用 2 楼 zhwdai 的回复:] [quote=引用 1 楼 stherix 的回复:] 按钮的CauseValidation=true应该只当和文本框同一个容器下才会触发 或者父容器有Validating,按钮是子控件也会
按钮和文本框跨容器也会触发,只是当焦点移动到CauseValidation=False之后,动作就不一样了。很迷惑[/quote] 跨容器的时候,如果textbox当前是焦点,你点一个CauseValidation=true的按钮,因为这个时候textbox正好失去了焦点,所以会立即触发 但是如果你先点了一个CauseValidation=false的按钮,那么不会触发,你再点击CauseValidation=true的按钮,由于这个按钮和textbox不是在一个容器类,而且焦点早不在textbox上了,winform将不能找到需要Validate的文本框(因为只会搜索同父控件或者按钮的父控件)[/quote] 谢谢回复。如果父控件不相同,焦点从CauseValidation=False控件移动到CauseValidation=True的控件,能否实现同父控件的效果呢?[/quote] 试了下应该是不行
zhwdai 2019-04-16
  • 打赏
  • 举报
回复
引用 3 楼 stherix 的回复:
[quote=引用 2 楼 zhwdai 的回复:]
[quote=引用 1 楼 stherix 的回复:]
按钮的CauseValidation=true应该只当和文本框同一个容器下才会触发
或者父容器有Validating,按钮是子控件也会


按钮和文本框跨容器也会触发,只是当焦点移动到CauseValidation=False之后,动作就不一样了。很迷惑[/quote]

跨容器的时候,如果textbox当前是焦点,你点一个CauseValidation=true的按钮,因为这个时候textbox正好失去了焦点,所以会立即触发
但是如果你先点了一个CauseValidation=false的按钮,那么不会触发,你再点击CauseValidation=true的按钮,由于这个按钮和textbox不是在一个容器类,而且焦点早不在textbox上了,winform将不能找到需要Validate的文本框(因为只会搜索同父控件或者按钮的父控件)[/quote]

谢谢回复。如果父控件不相同,焦点从CauseValidation=False控件移动到CauseValidation=True的控件,能否实现同父控件的效果呢?
stherix 2019-04-16
  • 打赏
  • 举报
回复
引用 2 楼 zhwdai 的回复:
[quote=引用 1 楼 stherix 的回复:] 按钮的CauseValidation=true应该只当和文本框同一个容器下才会触发 或者父容器有Validating,按钮是子控件也会
按钮和文本框跨容器也会触发,只是当焦点移动到CauseValidation=False之后,动作就不一样了。很迷惑[/quote] 跨容器的时候,如果textbox当前是焦点,你点一个CauseValidation=true的按钮,因为这个时候textbox正好失去了焦点,所以会立即触发 但是如果你先点了一个CauseValidation=false的按钮,那么不会触发,你再点击CauseValidation=true的按钮,由于这个按钮和textbox不是在一个容器类,而且焦点早不在textbox上了,winform将不能找到需要Validate的文本框(因为只会搜索同父控件或者按钮的父控件)
zhwdai 2019-04-16
  • 打赏
  • 举报
回复
引用 1 楼 stherix 的回复:
按钮的CauseValidation=true应该只当和文本框同一个容器下才会触发
或者父容器有Validating,按钮是子控件也会


按钮和文本框跨容器也会触发,只是当焦点移动到CauseValidation=False之后,动作就不一样了。很迷惑
stherix 2019-04-15
  • 打赏
  • 举报
回复
按钮的CauseValidation=true应该只当和文本框同一个容器下才会触发 或者父容器有Validating,按钮是子控件也会

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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