我在我的项目中使用了以下代码:
txtVoornaam.Locked = False
txtVoornaam.BorderStyle = 4
txtVoornaam.BorderColor = RGB(255, 165, 0
txtAchternaam.Locked = False
txtAchternaam.BorderStyle = 4
txtAchternaam.BorderColor = RGB(255, 165, 0)
txtAfdeling.Locked = False
txtAfdeling.BorderStyle = 4
txtAfdeling.BorderColor = RGB(255, 165, 0)
我想知道是否有办法不在我的代码中显示这个或缩短它。如果我使用它几次,代码会变得很长。
答案 0 :(得分:5)
每当你需要重复一套说明,而不是复制+面食代码时,你的第一反应应该是问自己"我怎样才能避免复制这个块并且结束?" - 并且解决方案几乎总是提取方法并对其进行参数化。
所以你采取了一个重复的块:
txtAchternaam.Locked = False
txtAchternaam.BorderStyle = 4
txtAchternaam.BorderColor = RGB(255, 165, 0)
然后在新范围内最后一次复制它:
Private Sub RenameMe()
txtAchternaam.Locked = False
txtAchternaam.BorderStyle = 4
txtAchternaam.BorderColor = RGB(255, 165, 0)
End Sub
然后提取参数:
Private Sub RenameMe(ByVal target As Control)
target.Locked = False
target.BorderStyle = 4
target.BorderColor = RGB(255, 165, 0)
End Sub
然后用调用新程序替换重复的块:
RenameMe txtVoornaam
RenameMe txtAchternaam
RenameMe txtAfdeling
或者如果这仍然很乏味,你可以迭代控件并在循环体中调用该程序 - 无论什么最适合你。
如果您需要更多灵活性,请提取更多参数并根据需要进行Optional
:
Private Sub RenameMe(ByVal target As Control, Optional ByVal lockCtrl As Boolean = False, Optional ByVal brdrStyle As Long = 4, Optional ByVal brdrColor As Long = 42495)
target.Locked = lockCtrl
target.BorderStyle = brdrStyle
target.BorderColor = brdrColor
End Sub
现在最困难的是给RenameMe
一个有意义的名字,以恰当地传达这里发生的事情。我建议FormatControl
或类似的东西。
答案 1 :(得分:2)
如果您通过表单创建了多个控件,则可以执行以下操作:
Dim names() As String
names = Split("txtVoornaam,txtAchternaam,txtAfdeling", ",")
Dim ctrl As Variant
Dim ctrlName As Variant
For Each ctrl In Me.Controls
For Each ctrlName In names
If StrComp(ctrlName, ctrl.Name) = 0 Then
ctrl.Locked = False
ctrl.BorderStyle = 4
ctrl.BorderColor = RGB(255, 165, 0)
End If
Next ctrlName
Next ctrl
此代码遍历适合您列表的每个控件名称。
然而,这比Mat的Mug的答案要低得多,因为你正在遍历表单中的整个控件列表,但它确实展示了如何获取静态名称列表并迭代它们和集合。 / p>
如果您想要更改所有文本控件,这将是这样做的方法;只需删除ctrlName检查。
正如Parfait已正确指出的那样,如果您对控件名称有信心,可以将代码缩短为以下代码:
Dim names() As String
names = Split("txtVoornaam,txtAchternaam,txtAfdeling", ",")
Dim ctrlName As Variant
For Each ctrlName In names
With Me.Controls(ctrlName)
.Locked = False
.BorderStyle = 4
.BorderColor = RGB(255, 165, 0)
End With
Next ctrlName
答案 2 :(得分:1)
function Lockdown(strControl)
with me(strControl)
.locked = false
.borderstyle = 4
.bordercolor = RGB(255,165,0)
end with
根据您的来电地点使用我或表格!formname
答案 3 :(得分:0)
如果你的控件是相同的,显然将它们放在一个你可以从任何地方调用的子/函数中。我不会尝试锁定或更改文本框的格式,而只是启用/禁用,它将为您处理格式:
textbox.enabled = true / false
如果你在多个表单上执行此操作并且真的想要一个子/函数来控制启用/禁用每个表单上的文本框,那么有多种方法可以做到这一点,解决方案将取决于您的需求,但肯定可行的,有些已经在上面评论过。
例如,您可以使用文本框的“tag”属性来标记要启用/禁用的表单上的文本框。然后,您可以使用单个子/函数作为参考,然后您可以读取该表单上所有文本框的“tag”属性,如果它们是您标记的那些,您将继续启用/禁用它们