呼入控制在重新进入时输入事件

时间:2015-12-16 20:56:06

标签: excel-vba vba excel

我有一个UserForm,它使用多个ListBox以及TextBox控件。我已设置标签顺序,因此用户可以按顺序标记控件。我还编写了一个函数来检查空和/或未选择的控件,强制用户完整地填写表单,因此希望所有控件值为空,直到用户选中该控件并键入值以确保控件不是'看着。

我有ListBox(n).Listindex在Control_Enter事件而不是-1时defualt为0。这允许用户切入控件并相当平滑地键入列表。这适用于第一个带有以下代码的条目:

Private Sub ListBox1_Enter()
Me.ListBox1.ListIndex = 0
End Sub

提交表单数据后,即CommandButton1_Click(),数据被放入工作表中,所有Control值都被清除,Focus被放回到表单中的第一个控件上。但是,当ListBox控件被选中时,ListIdex默认返回-1。为什么Control_Enter事件不会被触发?

1 个答案:

答案 0 :(得分:0)

Control_Enter事件恰好在控件获得焦点之前发生,例如通过Tab键到控件上。但是,在用户退出该控件之前,它不会再次出现。如果您希望处理某种重新输入事件,则需要以编程方式退出控件。我认为将重点放在另一个控件上就可以做到,例如CommandButton1.SetFocus

然而,我不禁想到用户的界面体验会很奇怪。当用户选择控件时更改控件可能会导致用户错误地解释他的界面操作,或者好像应用程序不在他的控制范围内。

我很难理解为什么你不会在应用启动时设置ListBox值,然后在处理他的选择时。据推测,有一些代码可以处理ListBox值,甚至可能由某种执行 CommandButton触发。我将重置该代码末尾的默认值。通过这种方式,用户可以提示他的选择已成功处理。