希望有人可以帮助解决这个问题 - 我正在尝试使用事件为userform文本框验证开发一个类。如果文本框文本因任何原因无效(例如空白或非数字值等),我想阻止用户退出文本框。这通常在textbox exit事件中完成(使用Cancel参数),但是包含一个定义了WithEvents的文本框的类缺少exit事件已被很好地记录,所以我试图采取不同的方法。
我试图检测焦点移动到新控件,然后将焦点设置回文本框,而不是阻止焦点离开违规文本框。我正在取得进展,但是在框架控件内部遇到了控件问题。 如果用户直接在框架内的控件上单击,则控件的鼠标事件表示焦点已移至新控件。但是如果用户在框架内单击(但不是直接在框架中的控件上),焦点将移动到框架中的第一个控件,但不会有任何事件表明这一点。所以我尝试使用框架的mousedown事件,以便可以将焦点设置回有问题的文本框。
如果我单击一个明显位于框架控件内的区域,这很有效。但是,如果我只是在框架边框内或框架标题区域内单击,则不会发生MouseDown事件。我发现MouseUp和Click事件有同样的问题。结果是焦点已移至框架内的新控件,但尚未检测到。
然后我发现使用框架的Enter事件产生了所需的结果 - 无论我在何处单击框架控件,如果焦点移动,都会发生Enter事件。这很好,除了框架的Enter事件代码必须在设计时完成,因为enter事件也不适用于在类中声明为WithEvents的框架。这很烦人,我希望能够使用MouseDown,但无法解决这个问题。我在Excel 2003,2010和2013中得到了相同的结果。有没有人知道为什么MouseDown和MouseUp事件有时会像我描述的那样丢失?