我正在尝试循环浏览所有文本框/组合框,如果为空,则将其边框颜色更改为红色。我已经尝试了以前的解决方案;处理焦点";功能,但只有当我点击文本框/组合框时,边框颜色才会变为红色。
- 如何在不需要点击的情况下更改边框颜色
- 其次,如何使标签名称显示在消息框中,而不是控件的名称
上一个示例:https://www.access-programmers.co.uk/forums/threads/change-border-color-of-textboxes-when-they-have-focus.246363/
Public Function validateCase() As Boolean
Dim ctrl As Control
For Each ctrl In Me.Controls
If IsNull(ctrl) Then
If TypeOf ctrl Is TextBox Or TypeOf ctrl Is ComboBox Then
MsgBox (ctrl.Name & " is Empty")
ctrl.OnGotFocus = "=HandleFocus([" & ctrl.Name & "], True)"
End If
End If
Next ctrl
End Function
Public Function HandleFocus(ByRef ctrl As Control, ByVal blnFocus As Boolean)
If blnFocus = True Then
ctrl.BorderColor = RGB(255, 0, 0)
Else
ctrl.BorderColor = RGB(0, 0, 0)
End If
End Function
ctrl.LabelName.caption
将LabelName更改为标签的名称
对您自己回答的关于边框的问题的简短评论:在设置边框颜色之前,绝对没有理由设置焦点。你误解了你提到的问题的目的:当控件获得焦点时,改变边框颜色的想法
请注意,在Stackoverflow上一次只能问一个问题。如果你需要知道两件事,可以分别问两个问题。
要查找文本框(或类似控件(的标签,请使用控件的controls属性。标签存储为controls(0)
。以下2个函数分别获取控件的标签控件。标题:
Function getLabelCaption(ctrl As Control) As String
Dim ctrlLabel As label
Set ctrlLabel = getLabel(ctrl)
If Not ctrlLabel Is Nothing Then getLabelCaption = ctrlLabel.Caption
End Function
Function getLabel(ctrl As Control) As label
On Error Resume Next
If TypeName(ctrl.Controls(0)) = "Label" Then
Set getLabel = ctrl.Controls(0)
End If
On Error GoTo 0
End Function
在你的代码中,你可以使用类似的东西
Dim caption as String
caption = getLabelCaption(ctrl)
MsgBox Iif(caption = "", ctrl.name, caption) & " is Empty")
我有一个部分答案。
我已经通过在ctrl.OnGotFocus
后面添加一行ctrl.SetFocus
解决了第一个问题。
第二个问题我没有答案。