以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 如何执行某个现成的事件? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=3740) |
-- 作者:reachtone -- 发布时间:2009/7/29 19:03:00 -- 如何执行某个现成的事件? 例如,窗口上有个日期输入控件,还有个列表框控件。 在日期输入控件中有个事件设置,就是当日期改变时,会自动根据该日期生成一个选项列表。正常情况下,在日期框选择不同的日期时,都会动态改变列表框的内容。 我现在的问题是:窗口在AfterLoad之后、怎样让日期输入框中的事件自动执行?也就是说,我希望窗口加载完毕后,马上就能看到变化后的列表框内容。现在最大的难点就在于,不知道在窗口的AfterLoad事件中如何去直接执行日期输入框中的事件。 我也尝试写了以下代码,但无法运行: e.Form.Controls("DateTimePicker1").Select() Sendkeys.Send({ENTER}) |
-- 作者:mr725 -- 发布时间:2009/7/29 19:11:00 -- 试一试我的理解: e.Form.Controls("DateTimePicker1").Select() Sendkeys.Send({ENTER}) ‘这两行代码并没有使日期改变呀~ 要不先清空DateTimePicker1后,再赋值呢。 |
-- 作者:reachtone -- 发布时间:2009/7/29 19:19:00 -- 以下是引用mr725在2009-7-29 19:11:00的发言:
试一试我的理解: e.Form.Controls("DateTimePicker1").Select() Sendkeys.Send({ENTER}) ‘这两行代码并没有使日期改变呀~ 要不先清空DateTimePicker1后,再赋值呢。 在AfterLoad事件中已经先将日期的默认值设置为当天的日期了,我没贴出来而已。完整的是这样的: |
-- 作者:reachtone -- 发布时间:2009/7/29 19:21:00 -- 难道是SendKeys的写法不对?请高手指教。 |
-- 作者:mr725 -- 发布时间: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 -- 发布时间:2009/7/29 19:54:00 -- afterload后,e.Form.Controls("1").Value 就应该是原始值,没有变化就不会动态改变列表框的内容。 帮助中是这样说的: Value 字符型,返回或设置组合框的值。 注意Value和Text两个属性的不同: 1、通常两者返回的内容是相同的,但是在输入的过程中,两者会有所差别。例如有一个组合框,它最初的内容是"中国",此时其Text和Value属性的内容都是“中国”,现在选择该组合框进行编辑,输入“中华”,此时Text的内容是“中华”,而Value的还是“中国”,输入结束,选择其它控件,此时该控件的Text和Value属性都是“中华”。通俗一点:Value返回的是控件已经输入完成的值,而Text返回的是控件中显示的文本内容,它会随着编辑的进行,而不断地变化。 |
-- 作者:lxl -- 发布时间:2009/7/29 21:13:00 -- 也可以把事件代码直接复制到AfterLoad里面去 [此贴子已经被作者于2009-7-29 21:14:08编辑过]
|
-- 作者:reachtone -- 发布时间:2009/7/30 7:51:00 -- 谢谢mr725和lxl的回复。
上面的代码中,就是Sendkeys的问题。改成Sendkeys.Send("{ENTER}")后,预览及调试时都正常,可以达到我需要的效果,但在关闭项目后,重新双击打开该foxtable文件时,提示“Sendkeys无法在此程序内执行”。按提示改用SendWait方法,则又达不到我要的效果。郁闷了! 至于lxl所建议的把事件代码直接复制过去,我认为这不是一个好的办法。这样做,一方面会造成程序臃肿,另一方面维护起来也不方便。一旦代码修改就要同时修改多处。 建议老六增加一个可执行现成任意事件的方法,这样可以使程序代码更加简洁、也更灵活! [此贴子已经被作者于2009-7-30 10:37:20编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2009/7/30 7:59:00 -- 需要重用的代码,可以用自定义函数解决,这样更好 单击按钮之类的代码,以后可以提供直接执行的方法,就象菜单按钮有PerformClick方法一样 |
-- 作者:reachtone -- 发布时间:2009/7/30 9:48:00 -- 以下是引用狐狸爸爸在2009-7-30 7:59:00的发言:
单击按钮之类的代码,以后可以提供直接执行的方法,就象菜单按钮有PerformClick方法一样 请老六用笔头记下来,我真担心你过段时间又忘了 |