Foxtable(狐表)用户栏目专家坐堂 → 对窗口中输入框的ValueChanged事件及输入框的其他事件的分析与讨论!


  共有20210人关注过本帖树形打印复制链接

主题:对窗口中输入框的ValueChanged事件及输入框的其他事件的分析与讨论!

帅哥哟,离线,有人找我吗?
cpayinyuan
  21楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2009/2/8 15:26:00 [只看该作者]

我考虑了一个解决方案,假如输入框("NumericComboBox1")与全局变量vars("a1")绑定,我把输入框的ValueChanged事件改为:
   if e.Form.Controls("NumericComboBox1").value=vars("a1")
       return
   end if
   messagebox.show("激发了NumericComboBox1的ValueChanged事件!")

   (ValueChanged代码段……)

    不知贺老师所说的增加一个全局变量值改变的事件,原理是否与此类似?当然了,能增加一个事件更好,更方便快捷了!
   不知这样是否会存在这样一个问题?虽然输入框和全局变进行了绑定,但全局变量的改变不一定是在输入框中,即全局变量的值可能在其他地方(如其他事件中)进行了改变,不知会不会对这个事件造成什么影响?

   另外,对输入框的事件提两点建议:
(1)与列的Datacolchanging类似,输入框也需要一个这个的Valuechanging事件,以实现在输入框的内容变化前执行,对输入框的内容的合理性进行验证,并拦截不合理的情况,取消变化(这个事件与Valuechanged事件和Validating事件有本质的区别,前者是在变化前执行,后两者是在变化后执行).
(2)对ValueChanged事件和ValueChanging事件各增加一个E参数,以取得变化前的值,目前的E参数只能取得变化后的值,在很多时候需要变化前的值。
     总之,个人一直感觉贺老师对表本身的事件非常重视,一直对窗口功能(包括窗口中的事件)重视不够,希望贺老师能够重视窗口功能部分的增强,把窗口中的事件也能像表事件那样功能强大!就个人意见而言,认为窗口控件的事件与表事件同等重要!根据我个人的习惯,因为考虑到最终用户的易操作性和数据安全性问题,我设计应用系统时基本上把所有的数据计算、数据验证都放在了窗口控件(往往是输入框)的事件中,而表事件很少用到。
     因为一般在应用系统中,编辑通过窗口进行更为安全。在大部分的管理软件中,通常在窗口中编辑数据的时候,并不直接修改表中的数据,而是只修改全局变量的值,而窗口中往往有两个按钮“保存”和“取消”,如果在窗口中编辑后点“保存”按钮,再把全局变量的值写到表中;而如果点“取消”按钮,就不再把全局变量的值写到表中。而如果直接编辑表,一旦修改就直接保存在表中,很难取消了。
[此贴子已经被作者于2009-2-8 18:10:27编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
cpayinyuan
  22楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2009/2/8 18:13:00 [只看该作者]

经过认真测试,发现窗口输入框的Leave事件(离开后)、Valuechanged事件(值改变后)、Validating事件(离开前)、Dataparse事件(写数据时)这4个事件的执行顺序有点乱,好像不太正确,目前的执行顺序是:
(1)、Leave事件(离开后):这时控件的值是变化前的老值,绑定的变量是变化前的老值;
(2)、Valuechanged事件(值改变后):这时控件的值是变化后的新值,绑定的变量是变化前的老值;
(3)、Validating事件(离开前):这时控件的值是变化后的新值,绑定的变量是变化前的老值;
(4)、Dataparse事件(写数据时):这时控件的值是变化后的新值,绑定的变量是变化前的老值;
   关键是Leave 事件(离开后执行)这个事件,既与名字不符(离开后执行的事件怎么在最早执行呢?),好像也没有太大的实际意义,既然有离开前事件,目前的设计中离开后事件好像没有任何意义!而且,在Validating事件做验证也有问题,这时候控件的值已经是变化的值,而且从E参数中不能取到变化前的老值,如果验证发现不符合条件,怎么恢复老值呢?(在实际应用中,验证发现不符合条件时,往往需要恢复成原来的值,仅仅不能离开控件是不够的,目前虽然可以通过重读绑定变量的值来解决,因为变量的值没有改变,但总感觉好像有些别扭)。
   个人建议改进如下(按控件的执行顺序排列):
(1)、Valuechanging事件(值改变前,注意验证应改在本控件中):这时控件的值是变化前的老值,绑定的变量是变化前的老值;但这个事件应增加一个E参数,可以取到控件变化后的新值;
(2)、Valuechanged事件(值改变后):这时控件的值是变化后的新值,绑定的变量是变化前的老值;但这时候应增加一个E参数,可以取到控件变化前的老值;
(3)、Validating事件(离开前):这时控件的值是变化后的新值,绑定的变量是变化前的老值;
(4)、Dataparse事件(写数据时):这时控件的值是变化后的新值,绑定的变量是变化前的老值;
(5)、Leave事件(离开后):这时控件的值是变化后的新值,绑定的变量也是变化后的新值;

    另外,再次建议在ValueChanged事件中,屏蔽掉在打开窗口或者切换页面时不要执行。我实在想不出在打开窗口或者切换页面时执行这个事件有什么实际意义。不要说微软 .net就是设计成只要值改变就执行这个事件,微软.net只是一个大的设计框架,我估计微软并没有设计Foxtable中各个事件的名字和执行顺序,Foxtable 作为面向应用的软件应以实际需求为导向,而不应以因为微软件的设计框架为主就不能适应用户的需要了!


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目5.table

[此贴子已经被作者于2009-2-8 19:31:37编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  23楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/2/8 21:56:00 [只看该作者]

呵呵,确实这些事件的顺序是微软的.net开发环境决定的,我也无能为力。
只能在力所能及的范围内尽可能作些调整,满足大家的需求。

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  24楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/2/8 22:05:00 [只看该作者]

我研究一下,看看Leave能否在最后触发。

补充:尝试了,暂时没有办法。
[此贴子已经被作者于2009-2-8 22:12:15编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
cpayinyuan
  25楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2009/2/8 22:28:00 [只看该作者]

以下是引用狐狸爸爸在2009-2-8 21:56:00的发言:
呵呵,确实这些事件的顺序是微软的.net开发环境决定的,我也无能为力。
只能在力所能及的范围内尽可能作些调整,满足大家的需求。
噢,是我误解了,望贺老师谅解!如果这些控件的名称和顺序都是微软的开发环境决定的,尽管有些别扭,也只能先这样用了。好在目前的软件中,根据控件值和绑定的变量值的关系和先后顺序,可以解决所有的问题,那就先这样使用吧(只是目前的控件值和变量值的关系轻易不要改变,如果变了也要给大家说一声)。

 回到顶部
帅哥哟,离线,有人找我吗?
cpayinyuan
  26楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2009/2/10 10:09:00 [只看该作者]

以下是引用狐狸爸爸在2009-2-8 21:56:00的发言:
呵呵,确实这些事件的顺序是微软的.net开发环境决定的,我也无能为力。
只能在力所能及的范围内尽可能作些调整,满足大家的需求。

贺老师,2月10号的版本增加了一个全局变量变化的事件,基本上可以解决问题了.
但我还是想问一下, 在现有软件不进行大的变动的基础上,窗口输入框的ValueChanged事件能否增加一个E参数,在ValueChanged事件中可以取到控件变化前的值.这样,设计系统时就比较方便了!希望您能解决这个问题!

[此贴子已经被作者于2009-2-10 10:09:20编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  27楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/2/10 11:08:00 [只看该作者]

呵呵,这个没有办法的

 回到顶部
帅哥哟,离线,有人找我吗?
cpayinyuan
  28楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2009/2/10 12:42:00 [只看该作者]

以下是引用狐狸爸爸在2009-2-10 11:08:00的发言:
呵呵,这个没有办法的

     贺老师,希望您再想想办法,我们相信您!以前您说没有办法的事情,后来都慢慢解决了!希望这次也一样!
     另外,我发现Leave事件中的控件值就是变化前的值,只是把ValueChanged事件中的代码改在Leave 事件中也并不合适(因为触发ValueChanged事件时并不一定触发Leave事件)。但从这一点上我感觉系统好似有办法能取到控件变化前的值!


 回到顶部
帅哥哟,离线,有人找我吗?
lzzhx
  29楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:995 积分:6712 威望:0 精华:0 注册:2015/1/12 22:12:00
  发帖心情 Post By:2016/3/5 11:42:00 [只看该作者]

ValueChanged事件中,屏蔽掉在打开窗口或者切换页面时不要执行:

这个问题现在到底解决了没有,我现在也存在这个问题,不知该如何解决?

 回到顶部
帅哥哟,离线,有人找我吗?
Hyphen
  30楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/3/5 12:07:00 [只看该作者]

改到其它事件中处理

 回到顶部
总数 30 上一页 1 2 3