Mousedown事件的框架控制并不总是会触发

希望有人可以帮助这个 – 我正在尝试开发一个使用事件的用户窗体文本框validation的类。 我想阻止用户退出文本框,如果文本框文本是无效的(如空白或非数字值等),无论出于何种原因。 这通常会在文本框退出事件(使用Cancel参数)中完成,但缺less包含定义的WithEvents的文本框的类的退出事件是有据可查的,所以我试图采取不同的方法。

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

这个效果很好,如果我点击一个明显的框架控制区域。 但是,如果我只是在框架边框内或框架标题区域中单击,MouseDown事件不会发生。 我发现MouseUp和Click事件有同样的问题。 结果是焦点已经转移到框架内的新的控制,但是这没有被检测到。

但后来我发现使用框架的Enter事件产生了所需的结果 – 无论我在框架控件上单击哪个位置,如果焦点移动,都会发生Enter事件。 这很好,除了框架的Enter事件代码必须在devise时完成,因为enter事件对于在类中声明了WithEvents的框架也是不可用的。 这是烦人的,我希望能够使用MouseDown,而不能解决这个问题。 我在Excel 2003,2010和2013中得到了相同的结果。有谁知道为什么MouseDown和MouseUp事件有时会丢失,正如我所描述的那样?