5 个解决方案
#1
对 MDI 子窗体来说,Activate事件仅当焦点从一个子窗体改变到另一个子窗体时才会发生。例如,在一个带有两个子窗体的 MDIForm 对象中,当焦点在子窗体之间移动时,它们能接收这些事件。然而,当焦点在一个 MDI 子窗体和一个非 MDI 子窗体之间移动时,父 MDIForm 将接收 Activate 事件。
#2
详细可查阅msdn
#3
Activate、Deactivate 事件
Activate -当一个对象成为活动窗口时发生。
Deactivate -当一个对象不再是活动窗口时发生。
语法
Private Sub object_Activate( )
Private Sub object_Deactivate( )
object 所在处代表一个对象表达式,其值是“应用于”列表中的一个对象。
说明
一个对象可以通过诸如单击它,或使用代码中的 Show 或 SetFocus 方法之类的用户操作而变成活动的。
Activate 事件仅当一个对象可见时才发生。例如,除非使用 Show 方法或将窗体的 Visible 属性设置为 True,否则,一个用 Load 语句加载的窗体是不可见的。
Activate 和 Deactivate 事件仅当焦点在一个应用程序内移动时才发生。在另一个应用程序中将焦点移向或移离一个对象时,不会触发任何一个事件。当一个对象卸载时,不会发生 Deactivate 事件。
Activate 事件在 GotFocus 事件之前发生,LostFocus 事件在 Deactivate 事件之前发生。
对 MDI 子窗体来说,这些事件仅当焦点从一个子窗体改变到另一个子窗体时才会发生。例如,在一个带有两个子窗体的 MDIForm 对象中,当焦点在子窗体之间移动时,它们能接收这些事件。然而,当焦点在一个 MDI 子窗体和一个非 MDI 子窗体之间移动时,父 MDIForm 将接收 Activate 和 Deactivate 事件。
如果一个由 Visual Basic 建立的 .exe 文件显示一个对话框,此对话框也是由建立在 Visual Basic 中的一个 .dll 文件所创建的,那么.exe 文件的窗体将获得 Deactivate 和 LostFocus 事件。这可能是不期望的,因为下列情况下不应获得 Deactivate 事件:
如果对象是一个过程之外的部件。
如果对象不是用 Visual Basic 编写的。
在开发环境中调用一个 Visual Basic 建立中的 DLL 时。
#4
我的问题的前提条件是:MDI窗体已经打开,但子窗体都没有打开。
当第一次打开子窗体时,该子窗体的Activate事件无法执行。
例如:frmMain是MDI窗体,Frm1是子窗体1,Frm2是子窗体2
程序运行时,先加载frmMain,然后在frMain里打开frm1,此时frm1的Activate事件不执行。
如果关掉frm1后再打开frm1,Activate事件才会执行。
当第一次打开子窗体时,该子窗体的Activate事件无法执行。
例如:frmMain是MDI窗体,Frm1是子窗体1,Frm2是子窗体2
程序运行时,先加载frmMain,然后在frMain里打开frm1,此时frm1的Activate事件不执行。
如果关掉frm1后再打开frm1,Activate事件才会执行。
#5
怎么没人回答啊?
#1
对 MDI 子窗体来说,Activate事件仅当焦点从一个子窗体改变到另一个子窗体时才会发生。例如,在一个带有两个子窗体的 MDIForm 对象中,当焦点在子窗体之间移动时,它们能接收这些事件。然而,当焦点在一个 MDI 子窗体和一个非 MDI 子窗体之间移动时,父 MDIForm 将接收 Activate 事件。
#2
详细可查阅msdn
#3
Activate、Deactivate 事件
Activate -当一个对象成为活动窗口时发生。
Deactivate -当一个对象不再是活动窗口时发生。
语法
Private Sub object_Activate( )
Private Sub object_Deactivate( )
object 所在处代表一个对象表达式,其值是“应用于”列表中的一个对象。
说明
一个对象可以通过诸如单击它,或使用代码中的 Show 或 SetFocus 方法之类的用户操作而变成活动的。
Activate 事件仅当一个对象可见时才发生。例如,除非使用 Show 方法或将窗体的 Visible 属性设置为 True,否则,一个用 Load 语句加载的窗体是不可见的。
Activate 和 Deactivate 事件仅当焦点在一个应用程序内移动时才发生。在另一个应用程序中将焦点移向或移离一个对象时,不会触发任何一个事件。当一个对象卸载时,不会发生 Deactivate 事件。
Activate 事件在 GotFocus 事件之前发生,LostFocus 事件在 Deactivate 事件之前发生。
对 MDI 子窗体来说,这些事件仅当焦点从一个子窗体改变到另一个子窗体时才会发生。例如,在一个带有两个子窗体的 MDIForm 对象中,当焦点在子窗体之间移动时,它们能接收这些事件。然而,当焦点在一个 MDI 子窗体和一个非 MDI 子窗体之间移动时,父 MDIForm 将接收 Activate 和 Deactivate 事件。
如果一个由 Visual Basic 建立的 .exe 文件显示一个对话框,此对话框也是由建立在 Visual Basic 中的一个 .dll 文件所创建的,那么.exe 文件的窗体将获得 Deactivate 和 LostFocus 事件。这可能是不期望的,因为下列情况下不应获得 Deactivate 事件:
如果对象是一个过程之外的部件。
如果对象不是用 Visual Basic 编写的。
在开发环境中调用一个 Visual Basic 建立中的 DLL 时。
#4
我的问题的前提条件是:MDI窗体已经打开,但子窗体都没有打开。
当第一次打开子窗体时,该子窗体的Activate事件无法执行。
例如:frmMain是MDI窗体,Frm1是子窗体1,Frm2是子窗体2
程序运行时,先加载frmMain,然后在frMain里打开frm1,此时frm1的Activate事件不执行。
如果关掉frm1后再打开frm1,Activate事件才会执行。
当第一次打开子窗体时,该子窗体的Activate事件无法执行。
例如:frmMain是MDI窗体,Frm1是子窗体1,Frm2是子窗体2
程序运行时,先加载frmMain,然后在frMain里打开frm1,此时frm1的Activate事件不执行。
如果关掉frm1后再打开frm1,Activate事件才会执行。
#5
怎么没人回答啊?