【发布时间】:2020-12-11 18:44:30
【问题描述】:
我在多种形式和多个应用程序中使用以下代码:
Private Sub EnableEdit(strFieldname As String, Optional bUseRed As Boolean = False)
Me.Controls(strFieldname).Enabled = True
Me.Controls(strFieldname).Locked = False
If Not Me.Controls(strFieldname).ControlType = acCheckBox Then
Me.Controls(strFieldname).BackStyle = 1
If bUseRed Then
Me.Controls(strFieldname).ForeColor = vbRed
Else
Me.Controls(strFieldname).ForeColor = vbBlack
End If
End If
End Sub
' and the calls e.g.
EnableEdit ("arHerstellerArtikelNr")
EnableEdit ("arEAN")
EnableEdit ("arArtikelNrIxxtraNice")
EnableEdit ("arSort")
最近的一个变化告诉我,在每个类对象中不重复代码会更好。首先我这样做的问题是,代码包含'Me.Controls(strFieldname)'来解决我想要操作的属性。由于这个原因,它必须在类对象本身中 --> 需要重复。
所以我重写了我的代码。设计目标是:一种从多个表单的事件中调用“EnableEdit”的方法,但不是在表单模块本身中提供代码,而是在只为应用程序提供一次的模块或类模块中提供代码。我认为访问的工作方式,我需要传递一个额外的参数来区分表单。但是,如果表单的名称需要作为附加参数传递(例如 EnableEdit ("frmInventoryUpdate", "arSort")),则代码的可读性较差且更容易出错。所以我想出了将名称作为不变量传递的想法:'EnableEdit (Me.FormName, "arSort")'。这让我想到了以下解决方案:
Public Sub EnableEdit2(strFormName As String, strFieldname As String, Optional bUseRed As Boolean = False)
Dim frmCurrentForm As Form
Set frmCurrentForm = Forms(strFormName)
frmCurrentForm.Controls(strFieldname).Enabled = True
frmCurrentForm.Controls(strFieldname).Enabled = True
frmCurrentForm.Controls(strFieldname).Locked = False
If Not frmCurrentForm.Controls(strFieldname).ControlType = acCheckBox Then
frmCurrentForm.Controls(strFieldname).BackStyle = 1
If bUseRed Then
frmCurrentForm.Controls(strFieldname).ForeColor = vbRed
Else
frmCurrentForm.Controls(strFieldname).ForeColor = vbBlack
End If
End If
End Sub
' and the calls e.g.
Call EnableEdit2(Me.FormName, "arHerstellerArtikelNr")
Call EnableEdit2(Me.FormName, "arEAN")
Call EnableEdit2(Me.FormName, "arArtikelNrIxxtraNice")
Call EnableEdit2(Me.FormName, "arSort")
该解决方案对我来说是可以接受的,但是我想知道是否有任何方法可以抑制通话中的“Me.FormName”,从而使通话变得更好?
【问题讨论】:
-
你也可以考虑实现WithEvents。有关示例和进一步阅读,请参阅我的文章 Create Windows Phone Colour Palette and Selector using WithEvents。