我建了2个窗口form1和form2,2个窗口的load载入中分别放置各自的参数初始化,也分别放置了button1和button2按钮,点击button1会打开form2,form1会隐藏,而点击button2会打开form1,form2会隐藏,经常要点击button1和button2按钮使在form1和form2这2个窗口来回切换。我的代码具体如下:
form1的代码:
Public Class form1
Private Sub form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim a1 As Integer = 1
End Sub
Private Sub button1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
Me.Hide()
Dim frm2 As New form2
frm2.Show()
End Sub
End Class
form2的代码:
Public Class form2
Private Sub form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim a2 As Integer = 2
End Sub
Private Sub button2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click
Me.Hide()
Dim frm1 As New form1
frm1.Show()
End Sub
End Class
具体疑问如下:
1.我需要经常要点击button1和button2按钮使在form1和form2这2个窗口来回切换,实际上我想要的效果是:当在form1点击button1,会“彻底”关闭form1(即不是所谓的hide隐藏掉),然后打开form2,同时form2的form2_Load会“重新”初始化a2;反之当在form2点击button2亦然。但上面的代码会不断实例化form2和form1窗口,会不断增加内存占用。这个有什么办法可以实现我想要的效果?
2.我试过不用窗体实例化,即不用Dim frm2 As New form2、frm2.Show()和Dim frm1 As New form1、frm1.Show(),直接使用form1.Show()和form2.Show()以及对应的hide(),这样不会增加内存占用,但是当在第2次来回切换这2个窗口时,不会调用对应Load来初始a1和a2,而且如果在这2个窗口加入me.close,都会把2个窗口关闭掉(我想要的效果是只是关闭当前窗口,另外一个窗口保持存在)。这种情况有什么办法解决?
感觉VB.NET这种窗体间互相调用机制很SB很不人性化。
------解决思路----------------------
有个最简单的办法,就是这样:
Application.Run(new Form2);
this.Close();
用新的线程去打开Form2,并且把它当做主线程,而Form1关闭后,之前的主线程就退出了
否则你将Form2当做一个子窗体打开的话,Form1关闭,主线程就退出了,Form2也会跟着关闭的
------解决思路----------------------
那 就把主窗体设置成透明就可以了
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Opacity = 0
Dim frm As New Form2
frm.Show()
End Sub
End Class
Public Class Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim frm As New Form3
frm.Show()
Me.Close()
End Sub
Public Class Form3
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim frm As New Form2
frm.Show()
Me.Close()
End Sub
End Class
以上是我的测试代码....
透明方式有两种一种是用窗体的Opacity属性,另外一种是用WindowsAPI