Office中国论坛/Access中国论坛

标题: Dhtmleditor在ACCESS中无法使用回车的问题 [打印本页]

作者: czqwf    时间: 2005-7-18 21:47
标题: Dhtmleditor在ACCESS中无法使用回车的问题
Dhtmledit控件在ACCESS中有一个奇怪的现象,就是无法使用回车.当回车后, 焦点就跑到窗体其他控件上去了.无论怎么设置都无济于事. 但是,有一次偶然的操作(但是由于偶然性我不记得是如何操作的了),居然使得在不改变窗体任何属性的情况下,DHTMLEDIT居然能使用回车生成下一行了, 百思不得其解.我在ACCESS911上面写过此贴,但一直没有人回应.不知这里有没有人解决过类似的问题?
作者: 海狸先生    时间: 2005-7-18 22:46
没用过

[此贴子已经被作者于2005-7-18 14:49:40编辑过]


作者: czqwf    时间: 2005-7-19 21:04
我知道用过的人少啊,所以大家一起研究一下嘛!!!
作者: czqwf    时间: 2005-8-3 05:21
好了,我知道解决的方法了,我敢说, 这里一百个用户中, 不会有多于两个人知道这个解决的方法. 当然,如果大家没兴趣我也懒得说了
作者: 海狸先生    时间: 2005-8-3 05:23
不要卖关子嘛。呵呵
作者: tmtony    时间: 2005-8-3 17:03
估计是使用ctr+enter 或 shift+enter来输入, 或者设置dhtmledit的有关enter行为的属性, 因为没有用过, 不知是否如此
作者: LucasLynn    时间: 2005-8-3 17:27
以下是引用czqwf在2005-8-2 21:21:00的发言:

好了,我知道解决的方法了,我敢说, 这里一百个用户中, 不会有多于两个人知道这个解决的方法. 当然,如果大家没兴趣我也懒得说了

我敢说, 这里一百个用户中, 不会有多于两个人需要用这个东西。
作者: czqwf    时间: 2005-8-24 21:43
当你在需要的时候,就用得着了. 方法是: 另建一个窗口,设置为pop但不是modal, 放置一个dhtmledit控件. 在打开正式的dhtml编辑器窗口后打开另一个pop的窗口, 同时在这个pop的dhtml控件中点一下. 这样正式的窗口的dhtml编辑器就可以接受回车了.原因,,,,我就是不知道要请教的啦!
作者: 海狸先生    时间: 2005-8-24 23:15
啊。这样也行。。。。收藏先,等用得到时,再看
作者: LucasLynn    时间: 2005-8-25 00:30
以下是引用czqwf在2005-7-18 13:47:00的发言:

Dhtmledit控件在ACCESS中有一个奇怪的现象,就是无法使用回车.当回车后, 焦点就跑到窗体其他控件上去了.无论怎么设置都无济于事. 但是,有一次偶然的操作(但是由于偶然性我不记得是如何操作的了),居然使得在不改变窗体任何属性的情况下,DHTMLEDIT居然能使用回车生成下一行了, 百思不得其解.我在ACCESS911上面写过此贴,但一直没有人回应.不知这里有没有人解决过类似的问题?



如果你困惑的只是焦点改变,那么只需要更改菜单-工具-选项-键盘-Enter移动方式-不移动。
作者: LucasLynn    时间: 2005-8-25 06:07
楼主别急,这个问题有办法解决,只是代码量比较大。我已经做了一个例程可以在DHTML Editor里面正常使用回车,但是有个后遗症就是一按回车剪贴板会被清空,目前正在修复这个BUG,差不多明天就可以发给你参考。
作者: LucasLynn    时间: 2005-8-25 08:06
作了整整半天的原因分析和文档学习,发现VBA在窗体的事件处理上的确存在一些缺陷。试图通过事件截获来解决这个问题未果。

最后决定放弃依赖不可靠的VBA事件处理,采用了一个取巧的做法,完整地解决了这个问题。

附件中为完成后的示例,核心部分是一个模块,加上窗体中的一段事件处理代码。你可以在自己的程序中自由使用。

[attach]12652[/attach]



[此贴子已经被作者于2005-9-6 9:05:18编辑过]


作者: czqwf    时间: 2005-9-1 03:48
你先试试就知道你说的根本行不通了
作者: czqwf    时间: 2005-9-1 04:04
我是说再上上楼的
作者: czqwf    时间: 2005-9-1 04:06
我看了一下,有点意思,我根据你的再看看还有没别的更好的方法
作者: LucasLynn    时间: 2005-9-1 04:54
以下是引用czqwf在2005-8-31 20:06:00的发言:

我看了一下,有点意思,我根据你的再看看还有没别的更好的方法

基本思路是这样的,使用窗体的KeyPreview属性来设置窗体捕获你的回车事件,然后通过调用WIn32 API完全备份剪贴板数据,然后写入一个换行符到剪贴版,利用编辑器控件几乎都有的Paste方法粘贴到编辑器里面,然后完全恢复原来的剪贴板。

应该是没有更好的方法了,为了这个问题,我曾经用EventsHub监视过回车键按下后所有事件的发生过程和顺序,问题是出在Access身上,基本不太可能解决得了。

[此贴子已经被作者于2005-8-31 20:57:35编辑过]


作者: czqwf    时间: 2005-9-5 20:12
我想也是的.

不过我的那种做法起作用的原因还是不能理解
作者: LucasLynn    时间: 2005-9-5 21:45
以下是引用czqwf在2005-9-5 12:12:00的发言:



我想也是的.

不过我的那种做法起作用的原因还是不能理解



  你那种做法起作用的原因并不复杂。我已经可以完整重复你所说的过程,但是这个过程你在程序中是无法使用的。

  这种方法的触发方式是在Enter后触发一个代码执行错误,自动切换到调试模式,然后回来,然后手工切换回来,就可以输入了。你说的乱点也是一样,都是在输入后迅速切换焦点,导致Access系统的事件处理出错,然后失去对于Enter的控制。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3