在 MS Access 中,我使用 VBA 为多个文本框设置事件处理函数:
txtMyTextBox.OnKeyUp = "=myEventHandlerFunction()"
到目前为止,效果很好。但是我想传递已按下的键的 KeyCode。当我为 TextBox 手动创建“常规”KeyUp 事件时,它会自动提供 KeyCode As Integer 和 Shift As Integer。我期望这些也可以与 OnKeyUp 属性一起使用,如下所示:
txtMyTextBox.OnKeyUp = "=myEventHandlerFunction(KeyCode)"
当然,我更新了 myEventHandlerFunction,以便它需要这个参数。但是,当触发该事件时,Access 会给出错误,指出该表达式导致错误,因为该对象不包含自动化对象KeyCode。
是否有可能如何使用 OnKeyUp 属性为 myEventHandlerFunction 提供 KeyCode?我是否使用了错误的格式,甚至错误的参数名称(我正在使用德语版的 Access,如果这很重要的话)?
MSDN documentation on the TextBox.OnKeyUp Property (Access)没有提供任何相关信息。
我知道我可以为每个 TextBox 手动设置 KeyUp 事件,并使用 KeyCode 参数从那里调用 myEventHandlerFunction。这不是我想要的,因为我想以编程方式设置事件处理,并且据我了解,这需要使用 OnKeyUp 属性。
最佳答案
问题在于您处理事件的方式。您不应将程序处理程序设置为文本表达式,而应使用类和 OOP 为文本框设置事件处理程序。
示例:
使用以下类:
clsTextboxHandler
Public textboxesHandler As clsTextboxesHandler
Public WithEvents txt As Access.Textbox
Private Sub txt_KeyUp(KeyCode As Integer, Shift As Integer)
textboxesHandler.HandleKeyUp txt, KeyCode, Shift
End Sub
clsTextboxesHandler
Private TextboxHandlers As Collection
Private Sub Class_Initialize()
Set TextboxHandlers = New Collection
End Sub
Public Sub LoadAllTextboxes(ByRef TheForm As Access.Form)
Dim ctl As Control
For Each ctl In TheForm.Controls
If ctl.ControlType = acTextbox Then 'Add additional criteria to only handle certain textboxes
LoadTextbox ctl
End If
Next ctl
End Sub
Public Sub LoadTextbox(txt As Access.Textbox)
Dim TextboxHandler As New clsTextboxHandler
Set TextboxHandler.txt= txt
Set TextboxHandler.textboxesHandler = Me
txt.OnKeyUp = "[Event Procedure]"
TextboxHandlers.Add TextboxHandler
End Sub
Public Sub HandleKeyUp(txt As Access.Textbox, KeyCode As Integer, Shift As Integer)
'Handle your KeyUp for multiple textboxes here. You can use the textbox object, keycode, etc.
End Sub
在表格上:
Private TextboxesHandler As clsTextboxesHandler
Public Sub Form_Load()
Set TextboxesHandler = New clsTextboxesHandler
TextboxesHandler.LoadAllTextboxes Me
End Sub
这有很多优点,例如能够在表单模块中为某些控件使用附加处理程序,以及能够引用在处理程序中调用事件的控件。
关于ms-access - 如何通过 MS-Access VBA 中的 TextBox.OnKeyUp 属性传递 KeyCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49789635/