我试图将OnClick
代码从表单上的某个按钮移动到某个功能,但我遇到了一些问题。有问题的按钮称为"重置",它会更改表单上大多数对象的属性。像:
Me.btnName.Caption = "Caption"
Me.btnName.Visible = True
Me.btnName.Top = 123
Me.btnName.Height = 456
'Etc
当把它移到一个函数上时,我似乎无法让它工作。我尝试了几种不同的写作方式,这是我在搜索时发现的,但它们似乎都没有用。我弄乱了主要形式的一些对象和子表单中的一些对象,所以我将展示两者的一些例子。编辑包含错误消息
Forms("FormName").btnName.Caption = "Caption"
'Application-defined or Object-defined error
Forms("FormName").Controls("btnName").Caption = "Caption"
'Ms Access cannot find the referanced form (I've double and triple checked that it is correct)
Forms("FormName").SubFormName.Form.btnName.Caption = "Caption"
'Application-defined or Object-defined error
Forms!FormName!btnName.Caption = "Caption"
'Cannot find the referenced form
Forms!FormName!SubFormName!btnName.Caption = "Caption"
'Cannot find the field reffered to in your expression
Forms!FormName.Controls!btnName.Caption = "Caption"
'Cannot find the referanced form
Forms!FormName!SubFormName!Form.btnName.Caption = "Caption"
'MS Access can't find the field 'SubFormName'
无论我尝试这些,我似乎无法让它发挥作用。也许我只是做了一些简单的错误,或者也许你不能从一个函数中改变这样的属性。无论如何,如果有人知道,我会很感激帮助。
请注意,我尝试使用的功能是在一个单独的模块中,而不是在表单后面的代码中。
答案 0 :(得分:3)
所以你在某个窗体的代码隐藏中有一个OnClick
处理程序,负责为生活在该窗体上的对象分配一堆属性。
您所做的是封装:外部代码无需关心表单{{1}的Top
和Height
属性(以及其他属性)按钮 - 事实是,外部代码甚至不需要关心表单上有一个按钮。
因此,您正在使用这个封装良好的对象,并且没有明显的原因移动代码。
如果您需要从外部调用该功能,那么请将其移出btnName
处理程序..但不在表单的代码隐藏之外。
将其移至某个OnClick
过程,如果外部代码需要调用该逻辑,则让其调用Public Sub OnReset()
。
theForm.OnReset
这样你就可以在表单中留下表单的实现细节,同时给外部代码一个抽象来说“我不在乎你的按钮是什么名字;我不在乎它们的大小或它们的标题是什么 - 但是当我说'重置'时,你应该重新初始化你为它们获得的任何值“ - 外部代码不需要知道Private Sub ResetButton_Click()
OnReset
End Sub
Public Sub OnReset()
Me.btnName.Caption = "Caption"
Me.btnName.Visible = True
Me.btnName.Top = 123
Me.btnName.Height = 456
'Etc
End sub
做什么具体地
这样说:重命名Reset
按钮的那一天,您是否需要简单地调整表单的代码隐藏,或者搜索整个项目中可能正在更改该按钮的每个可能位置btnName
或其他任何财产价值?
FYI Caption
是后期绑定代码,Foo!Bar.Something
的简写:Foo.Item("Bar").Something
和Bar
都不会在编译时验证。与Something
对比,其中编译器立即拾取拼写错误:编译器能够验证的早期绑定代码应始终是首选。
答案 1 :(得分:0)
您需要将属性设置为:
Forms!FormName!btnName.Caption = "New Caption"
或者,如果在子表单上:
Forms!FormName!<NameOfSubformCONTROL>.Form!btnName.Caption = "New Caption"