繁体   English   中英

MS从无格式子窗体访问VBA接收器(Catch)按下事件

[英]Ms access vba sink (catch) keydown event from a formless subform

我正在开发一个访问程序,用于维护其他应用程序的测试数据。 它是通用程序,不适用于特定应用程序。 假定测试数据存储在数据库表中。 因为我的程序事先不知道哪些表是要声明的应用程序的一部分,所以它从应用程序数据库中读取元数据,并为每个表创建链接表。 为了输入和维护数据,我有一个带有子窗体控件的窗体。 此子窗体控件没有预定义的源对象。 通过将源对象属性设置为“ table。[linkedtablename]”,可以将子窗体用于数据输入。 当用户从列表中选择另一个应用程序表时,该另一个表将分配给子表单。 这个效果很好。 现在,我需要处理此子窗体中的事件。 因为子窗体源对象不是窗体,所以这不是很明显。 没有参数时,捕获子窗体的事件是没有问题的。 您可以编写以下代码:

Me.subformname.form.oncurrent = "=customoncurrent()"

但是如何捕捉按键事件呢? 带有2个参数(键代码,shift)引发此事件。

我不能写:

Me.subformname.form.onkeydown = "=customkeydown()"

在运行时,VBA会引发错误,说明事件过程声明中缺少参数。

我试图使用'withevents'子句,但没有成功。 也许我对该条款的可能性了解得很少。

这个问题可以解决吗?

标记

您这里有一个很好的,简约的解决方案。 但是,由于您添加了捕获子表单事件的要求,因此它变得太简单了!

您可以采取几种方法,但我建议这样做:

  • 构建通用子表单,设置为以DataSheet模式显示
  • 将事件处理显式添加到子窗体的类模块
  • 在其中放置一堆具有通用名称的文本框,例如Field01,Field02等。该数目应超过最大表中的最大列数
  • 当您链接到新表时,您的代码会将表字段名称放在文本框的ControlSource属性中,在相关标签中设置标题,并根据需要设置其他属性
  • 最后,编写代码以隐藏未使用的文本框

这可能比其他方法要少。

顺便说一句,不要在表单类模块中使用WithEvents。 那只是在乞求麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM