以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  如何执行某个现成的事件?  (http://foxtable.com/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事件中已经先将日期的默认值设置为当天的日期了,我没贴出来而已。完整的是这样的:
e.Form.Controls("DateTimePicker1").Value = Date.Today
e.Form.Controls("DateTimePicker1").Select()
Sendkeys.Send({ENTER})


--  作者: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返回的是控件中显示的文本内容,它会随着编辑的进行,而不断地变化。

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

不知道对DateTimePicker是否也一样?


--  作者:lxl
--  发布时间:2009/7/29 21:13:00
--  

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

[此贴子已经被作者于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方法一样

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