Foxtable(狐表)用户栏目专家坐堂 → 如何执行某个现成的事件?


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

主题:如何执行某个现成的事件?

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19409 威望:0 精华:20 注册:2008/9/2 10:09:00
如何执行某个现成的事件?  发帖心情 Post By:2009/7/29 19:03:00 [只看该作者]

例如,窗口上有个日期输入控件,还有个列表框控件。
在日期输入控件中有个事件设置,就是当日期改变时,会自动根据该日期生成一个选项列表。正常情况下,在日期框选择不同的日期时,都会动态改变列表框的内容。
我现在的问题是:窗口在AfterLoad之后、怎样让日期输入框中的事件自动执行?也就是说,我希望窗口加载完毕后,马上就能看到变化后的列表框内容。现在最大的难点就在于,不知道在窗口的AfterLoad事件中如何去直接执行日期输入框中的事件。
我也尝试写了以下代码,但无法运行:
e.Form.Controls("DateTimePicker1").Select()
Sendkeys.Send({ENTER})

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2009/7/29 19:11:00 [只看该作者]

试一试我的理解:
e.Form.Controls("DateTimePicker1").Select()
Sendkeys.Send({ENTER})            ‘这两行代码并没有使日期改变呀~ 

要不先清空DateTimePicker1后,再赋值呢。  

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19409 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/7/29 19:19:00 [只看该作者]

以下是引用mr725在2009-7-29 19:11:00的发言:
试一试我的理解:
e.Form.Controls("DateTimePicker1").Select()
Sendkeys.Send({ENTER})            ‘这两行代码并没有使日期改变呀~ 

要不先清空DateTimePicker1后,再赋值呢。  

在AfterLoad事件中已经先将日期的默认值设置为当天的日期了,我没贴出来而已。完整的是这样的:
e.Form.Controls("DateTimePicker1").Value = Date.Today
e.Form.Controls("DateTimePicker1").Select()
Sendkeys.Send({ENTER})


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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19409 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/7/29 19:21:00 [只看该作者]

难道是SendKeys的写法不对?请高手指教。

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2009/7/29 19:36:00 [只看该作者]

也许:e.Form.Controls("DateTimePicker1").Value = Date.Today
改为:e.Form.Controls("DateTimePicker1").Text = Date.Today
     其他地方有时会这样,改一下就ok,不知道你的行不行? 
或者多一个来回(重复下面代码?):
e.Form.Controls("DateTimePicker1").Select()
Sendkeys.Send({ENTER})     》》》  或者是这个原因:Sendkeys.Send("{ENTER}")

[此贴子已经被作者于2009-7-29 19:39:15编辑过]

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2009/7/29 19:54:00 [只看该作者]

afterload后,e.Form.Controls("1").Value 就应该是原始值,没有变化就不会动态改变列表框的内容。   帮助中是这样说的:

Value

字符型,返回或设置组合框的值。

注意Value和Text两个属性的不同:

1、通常两者返回的内容是相同的,但是在输入的过程中,两者会有所差别。例如有一个组合框,它最初的内容是"中国",此时其Text和Value属性的内容都是“中国”,现在选择该组合框进行编辑,输入“中华”,此时Text的内容是“中华”,而Value的还是“中国”,输入结束,选择其它控件,此时该控件的Text和Value属性都是“中华”。通俗一点:Value返回的是控件已经输入完成的值,而Text返回的是控件中显示的文本内容,它会随着编辑的进行,而不断地变化。

2、Value属性是可读写的,而Text属性是只读的,如果你要设置组合框的值,只能通过Value属性。

不知道对DateTimePicker是否也一样?


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2009/7/29 21:13:00 [只看该作者]

也可以把事件代码直接复制到AfterLoad里面去
当然e.sender之类的要改成具体的控件名

[此贴子已经被作者于2009-7-29 21:14:08编辑过]

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19409 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/7/30 7:51:00 [只看该作者]

    谢谢mr725和lxl的回复。
    上面的代码中,就是Sendkeys的问题。改成Sendkeys.Send("{ENTER}")后,预览及调试时都正常,可以达到我需要的效果,但在关闭项目后,重新双击打开该foxtable文件时,提示“Sendkeys无法在此程序内执行”。按提示改用SendWait方法,则又达不到我要的效果。郁闷了!
    至于lxl所建议的把事件代码直接复制过去,我认为这不是一个好的办法。这样做,一方面会造成程序臃肿,另一方面维护起来也不方便。一旦代码修改就要同时修改多处。
    建议老六增加一个可执行现成任意事件的方法,这样可以使程序代码更加简洁、也更灵活!
[此贴子已经被作者于2009-7-30 10:37:20编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/7/30 7:59:00 [只看该作者]

需要重用的代码,可以用自定义函数解决,这样更好
单击按钮之类的代码,以后可以提供直接执行的方法,就象菜单按钮有PerformClick方法一样

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19409 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/7/30 9:48:00 [只看该作者]

以下是引用狐狸爸爸在2009-7-30 7:59:00的发言:
单击按钮之类的代码,以后可以提供直接执行的方法,就象菜单按钮有PerformClick方法一样

请老六用笔头记下来,我真担心你过段时间又忘了
图片点击可在新窗口打开查看


 回到顶部
总数 14 1 2 下一页