Excel 帧控件的Mousedown事件并不总是激发

Excel 帧控件的Mousedown事件并不总是激发,excel,vba,frame,mousedown,Excel,Vba,Frame,Mousedown,希望有人能帮上忙-我正在尝试开发一个使用事件进行UserFormTextBox验证的类。如果文本框文本因任何原因无效(如空白或非数值等),我希望阻止用户退出文本框。这通常是在textbox退出事件中完成的(使用Cancel参数),但是对于包含用Events定义的textbox的类来说,缺少退出事件是有很好的文档记录的,因此我尝试采用不同的方法 我没有阻止焦点离开有问题的文本框,而是尝试检测焦点移动到新控件,然后将焦点设置回文本框。我正在取得进展,但遇到了位于框架控件内的控件的问题。 如果用户直接

希望有人能帮上忙-我正在尝试开发一个使用事件进行UserFormTextBox验证的类。如果文本框文本因任何原因无效(如空白或非数值等),我希望阻止用户退出文本框。这通常是在textbox退出事件中完成的(使用Cancel参数),但是对于包含用Events定义的textbox的类来说,缺少退出事件是有很好的文档记录的,因此我尝试采用不同的方法

我没有阻止焦点离开有问题的文本框,而是尝试检测焦点移动到新控件,然后将焦点设置回文本框。我正在取得进展,但遇到了位于框架控件内的控件的问题。 如果用户直接单击帧内的控件,则该控件的鼠标事件表示焦点已移动到新控件。但是,如果用户在帧内单击(但不是直接单击帧中的控件),焦点将移动到帧中的第一个控件,但不会有任何事件指示这一点。因此,我尝试使用框架的mousedown事件,以便将焦点设置回有问题的文本框

如果单击明显位于框架控件内部的区域,则效果良好。但是,如果仅在帧边框内或在帧标题区域上单击,则不会发生MouseDown事件。我发现MouseUp和Click事件也有同样的问题。结果是焦点已移动到帧内的新控件,但未检测到

但后来我发现,使用帧的Enter事件产生了期望的结果——无论我在帧控件上单击什么位置,如果焦点移动,Enter事件都会发生。这很好,但框架的Enter事件代码必须在设计时完成,因为Enter事件对于类中用事件声明的框架也不可用。这是恼人的,我想能够使用MouseDown代替,但不能解决这个问题。我在Excel 2003、2010和2013中得到了相同的结果。有人知道为什么我描述的MouseDown和MouseUp事件有时会丢失吗