第一次打开窗口,Form_Activate无法响应,在线求救!!!!

时间:2022-03-16 17:47:15
在工程中有一个MDI窗体和若干MDI子窗体,当第一次打开子窗体时,该子窗体的Form_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事件才会执行。

#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事件才会执行。

#5


怎么没人回答啊?