解决使用工具栏组件时控件焦点事件的问题
2010-05-19 17:28
218 查看
winform程序,窗体上使用了toolStrip控件,也就是工具栏按钮控件。窗体上还有一些文本框,在文本框的失去焦点事件——也就是Leave事件中,做一些填写内容的验证,若验证通过,则将数据保存在某个对象A中。工具栏上有一些功能按钮,比如保存,将对象A中保存的内容保存下来。
但是发现,点击在toolStrip上添加的保存按钮,无法触发文本框的Leave事件,导致若填写内容后直接点击保存,将不会做内容的验证及将内容保存在对象A中,进一步导致文本框中的内容无法保存下来。
试验了一下,发现点击toolStrip中的按钮,的确不会使得文本框失去焦点。既然如此,只好想办法将焦点改变,从而触发文本框的Leave事件。
几经查阅和实验,发现倒也不难,只要在点击“保存”按钮时,用toolStrip1.Focus()将焦点设置在工具栏上即可。此时,会触发文本框的Leave事件,进而做数据的验证等,但若是数据验证不通过,则不应该继续执行保存功能。因此,可以在窗体中增加一个成员变量,用来记录数据验证的结果。在点击“保存”按钮时,用toolStrip1.Focus()改变焦点后,再根据增加的成员变量的值,来判断是否要继续进行保存操作。
工具栏是这样,估计菜单栏也是这样,不过没有试过,应该是同样的道理吧。
但是发现,点击在toolStrip上添加的保存按钮,无法触发文本框的Leave事件,导致若填写内容后直接点击保存,将不会做内容的验证及将内容保存在对象A中,进一步导致文本框中的内容无法保存下来。
试验了一下,发现点击toolStrip中的按钮,的确不会使得文本框失去焦点。既然如此,只好想办法将焦点改变,从而触发文本框的Leave事件。
几经查阅和实验,发现倒也不难,只要在点击“保存”按钮时,用toolStrip1.Focus()将焦点设置在工具栏上即可。此时,会触发文本框的Leave事件,进而做数据的验证等,但若是数据验证不通过,则不应该继续执行保存功能。因此,可以在窗体中增加一个成员变量,用来记录数据验证的结果。在点击“保存”按钮时,用toolStrip1.Focus()改变焦点后,再根据增加的成员变量的值,来判断是否要继续进行保存操作。
工具栏是这样,估计菜单栏也是这样,不过没有试过,应该是同样的道理吧。
相关文章推荐
- 解决因焦点转移到其它组件,导致在 JFrame 中捕获不到键盘按键事件问题的方法
- Windows 服务中使用 Timer 控件时,Tick 事件不命中问题的解决
- Windows 服务中使用 Timer 控件时,Tick 事件不命中问题的解决
- UpdatePanel控件中使用GridView时,RowCommand事件执行删除后,GridView不刷新问题。
- JQueryUI dialog控件不响应服务端事件问题解决,dialog不能提交表单
- C# Winform使用线程,委托定时更新界面UI控件,解决界面卡顿问题
- Android解决父控件拦截子控件手势滑动事件的问题
- IOS 使用百度社会化分享组件 个别问题解决方案
- 解决PhoneGap开发 A标签焦点事件出现黄色表框问题
- 解决页面中解决的“单击以激活并使用此控件”的问题
- 解决『回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。』问题
- TMethod的妙用:解决动态创建的组件的事件赋值问题 by LYSoft LiuYang
- UE4为组件Component注册事件时没有效果的问题解决
- 解决微信小程序组件scroll-view中bindscrolltolower事件触发不了的问题
- 使用C#解决部分Win8.1系统窗口每隔几秒失去焦点的问题
- 详解 Android中Libgdx使用ShapeRenderer自定义Actor解决无法接收到Touch事件的问题
- Android Studio该如何导入别人的开源库到自己的项目中并使用库中的控件,网上找过方法但是并不能搞定,希望实际问题 实际解决,拯救我这个傻瓜
- 解决使用MasterPage后,Page.FindControl方法找不到指定控件的问题
- Updatepanel 中使用 Timer 控件 失去焦点问题
- Windows线程(六)使用事件机制解决线程同步问题