有没有办法检测用户是否单击了禁用的按钮?
Is there a way to detect if user clicked a disabled button?
Hey, I have an UserForm into which an user inputs varius profile
fields.
Once it's filled in, there is verification - if anything goes astray,
the CommandButton
, named save_button
is disabled
我想要实现的是:如果用户点击按钮,当它处于禁用状态时,显示一个MsgBox
说他需要更正填写错误的字段
出于演示目的,我不会在此处粘贴验证程序,所以让我们假设 save_button.Enabled = False
是从 getgo 设置的。产生相同的结果。
save_button.Enabled = False ' already ran before, pretend this executes it
Private Sub save_button_Click()
If save_button.Enabled = False Then
MsgBox "Clicked disabled button"
End If
End Sub
问题是,一旦 CommandButton 被设置为 .Enabled = False
就不能再被正式点击(因此它甚至不能触发 Click()
过程)
我的下一个想法是使用 MouseUp
作为替代。问题是,
这会触发按钮上的任何微小移动,我不想用 MsgBox
es
轰炸用户
关于如何检测用户是否单击了禁用按钮,你能想出任何替代方案吗?
当控件被禁用时,单击事件会在树中向上冒泡。在您的情况下,我想用户表单将获得点击。如果您将保存按钮放在一个框架内,那么如果该按钮被禁用,它将获得点击。通过设置
使框架不可见相当容易
- 标题为“”
- BorderStyle 到 fmBorderStyleNone
- 特殊效果到 fmSpecialEffectFlat
然后调整框架的大小,使其与按钮的大小相同。
代码很简单:
Private Sub YourNewFrame_Click()
MsgBox "Save button disabled!"
End Sub
提示:如果绘制框架,剪切按钮并将其粘贴到新框架内,它会被正确放置。正确地,如在层次结构的右侧部分。在视觉上,您将不得不手动进行。
我想根据我对您问题的评论提供另一种方法。
在下面的 gif 中,您会看到 'Create Form' 在提供所有必要信息之前不会启用。你在 gif 中看不到太多,但每个需要验证的条目在代码中也有它。
该操作背后的基本代码是这样的:
Sub checkFields()
Select Case True
Case Len(Me.formTitleLine1) = 0, Len(Me.formPrefix) = 0, Len(Me.formNumber) = 0, Len(Me.formProduct) = 0, Len(Me.formEditionMonth) = 0, Len(Me.formEditionYear) = 0
Me.createForm.Enabled = False
Case Else
Me.createForm.Enabled = True
End Select
End Sub
它在每个相关框的 afterUpdate
事件中被调用:
Private Sub formEditionYear_AfterUpdate()
checkFields
End Sub
只需对 checkFields 子项进行一点小改动,您就可以在正确填写所有内容后才能显示保存按钮。该更改将是:
Me.createForm.Visible
而不是
Me.createForm.Enabled
Hey, I have an UserForm into which an user inputs varius profile fields.
Once it's filled in, there is verification - if anything goes astray, the
CommandButton
, namedsave_button
is disabled
我想要实现的是:如果用户点击按钮,当它处于禁用状态时,显示一个MsgBox
说他需要更正填写错误的字段
出于演示目的,我不会在此处粘贴验证程序,所以让我们假设 save_button.Enabled = False
是从 getgo 设置的。产生相同的结果。
save_button.Enabled = False ' already ran before, pretend this executes it
Private Sub save_button_Click()
If save_button.Enabled = False Then
MsgBox "Clicked disabled button"
End If
End Sub
问题是,一旦 CommandButton 被设置为 .Enabled = False
就不能再被正式点击(因此它甚至不能触发 Click()
过程)
我的下一个想法是使用 MouseUp
作为替代。问题是,
这会触发按钮上的任何微小移动,我不想用 MsgBox
es
关于如何检测用户是否单击了禁用按钮,你能想出任何替代方案吗?
当控件被禁用时,单击事件会在树中向上冒泡。在您的情况下,我想用户表单将获得点击。如果您将保存按钮放在一个框架内,那么如果该按钮被禁用,它将获得点击。通过设置
使框架不可见相当容易- 标题为“”
- BorderStyle 到 fmBorderStyleNone
- 特殊效果到 fmSpecialEffectFlat
然后调整框架的大小,使其与按钮的大小相同。 代码很简单:
Private Sub YourNewFrame_Click()
MsgBox "Save button disabled!"
End Sub
提示:如果绘制框架,剪切按钮并将其粘贴到新框架内,它会被正确放置。正确地,如在层次结构的右侧部分。在视觉上,您将不得不手动进行。
我想根据我对您问题的评论提供另一种方法。
在下面的 gif 中,您会看到 'Create Form' 在提供所有必要信息之前不会启用。你在 gif 中看不到太多,但每个需要验证的条目在代码中也有它。
该操作背后的基本代码是这样的:
Sub checkFields()
Select Case True
Case Len(Me.formTitleLine1) = 0, Len(Me.formPrefix) = 0, Len(Me.formNumber) = 0, Len(Me.formProduct) = 0, Len(Me.formEditionMonth) = 0, Len(Me.formEditionYear) = 0
Me.createForm.Enabled = False
Case Else
Me.createForm.Enabled = True
End Select
End Sub
它在每个相关框的 afterUpdate
事件中被调用:
Private Sub formEditionYear_AfterUpdate()
checkFields
End Sub
只需对 checkFields 子项进行一点小改动,您就可以在正确填写所有内容后才能显示保存按钮。该更改将是:
Me.createForm.Visible
而不是
Me.createForm.Enabled