目的:
Form1中New了Form2,初始化之后并Show出来
Form2中New了Form3,初始化之后并Show出来
此时想在Form3中直接对Form2进行操作。
分析:
由于Form1是程序入口,而Form2和Form3都是在另外的窗体中创建的临时对象,并且Form没有Parent属性,所以只是通过用Public Sub是无法通过直接通过Form3来操作Form2,因为在Form3中根本无法找到Form2这个临时对象。
如果是我的话,就会使用句柄来做相应操作,直接在mdl中设置公共变量来抓到窗口(但后来发现这样不好,因为MSDN中强调说,不要把hwnd放在变量里面)
当然还有其他方法可以达到这个目的,那就是使用Event
由于Form1是程序入口,而Form2和Form3都是在另外的窗体中创建的临时对象,并且Form没有Parent属性,所以只是通过用Public Sub是无法通过直接通过Form3来操作Form2,因为在Form3中根本无法找到Form2这个临时对象。
如果是我的话,就会使用句柄来做相应操作,直接在mdl中设置公共变量来抓到窗口(但后来发现这样不好,因为MSDN中强调说,不要把hwnd放在变量里面)
当然还有其他方法可以达到这个目的,那就是使用Event
例子:
不使用Events:
'--------Form1--------
Dim f2 As Form2
不使用Events:
'--------Form1--------
Dim f2 As Form2
Private Sub Command1_Click()
Set f2 = New Form2
f2.Show vbModal
End Sub
'--------Form1 End--------
Set f2 = New Form2
f2.Show vbModal
End Sub
'--------Form1 End--------
'--------Form2--------
Dim f3 As Form3
Dim f3 As Form3
Private Sub Command1_Click()
Set f3 = New Form3
f3.Show vbModal
End Sub
Set f3 = New Form3
f3.Show vbModal
End Sub
Public Sub f2W()
Me.Command1.Caption = "f2W"
End Sub
'--------Form2 End--------
Me.Command1.Caption = "f2W"
End Sub
'--------Form2 End--------
'--------Form3--------
Private Sub Command1_Click()
Call Form2.f2W
End Sub
'--------Form3 End--------
Private Sub Command1_Click()
Call Form2.f2W
End Sub
'--------Form3 End--------
这里按下Form3的按钮并不能达到改变Form2按钮的Caption的目的
使用Events:
'--------Form1--------
Dim f2 As Form2
'--------Form1--------
Dim f2 As Form2
Private Sub Command1_Click()
Set f2 = New Form2
f2.Show vbModal
End Sub
'--------Form1 End--------
Set f2 = New Form2
f2.Show vbModal
End Sub
'--------Form1 End--------
'--------Form2--------
Dim WithEvents f3 As Form3
Dim WithEvents f3 As Form3
Private Sub Command1_Click()
Set f3 = New Form3
f3.Show
End Sub
Set f3 = New Form3
f3.Show
End Sub
Public Sub f3_f2W()
Me.Command1.Caption = "f2W"
End Sub
'--------Form2 End--------
Me.Command1.Caption = "f2W"
End Sub
'--------Form2 End--------
'--------Form3--------
Public Event f2W()
Public Event f2W()
Private Sub Command1_Click()
RaiseEvent f2W
End Sub
'--------Form3 End--------
RaiseEvent f2W
End Sub
'--------Form3 End--------
这样就达到目的了!
转载于:https://blog.51cto.com/yyq90058/12263