如何使一个子窗体只打开一次?
如何使一个子窗体只打开一次?如何判断子窗体已经打开? 问题点数:20、回复次数:10Top
1 楼Snrmnm_sx(Ψ 踏雪无痕 Ω)回复于 2005-06-01 23:58:41 得分 0
你可以设置两个全局变量,用它们的数据来判断窗体是不是第一次打开,是不是已经打开!Top
2 楼Ninputer(装配脑袋)回复于 2005-06-02 08:28:10 得分 0
用Singleton模式设计窗口即可。Top
3 楼tl_pear(飘叶寻梦)回复于 2005-06-02 09:19:31 得分 6
MDI窗体:
Dim fm2 As New Form
For Each fm2 In Me.MdiChildren
If TypeOf fm2 Is Form2 Then
fm2.Activate()
fm2.WindowState = 2
Exit Sub
End If
Next
Dim fm2 As New Form2
fm2.MdiParent = Me
fm2.Show()
fm2.WindowState = 2
普通窗体
Shared frm2 As Form2
Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
'Dim newform As New Form2()
'newform.MdiParent = Me
'newform.Show()
If (frm2 Is Nothing) OrElse frm2.IsDisposed Then
frm2 = New Form2()
End If
frm2.Show()
frm2.Activate()
End SubTop
4 楼HAVENT(夜雨流星℡)回复于 2005-06-02 09:23:44 得分 0
MDI窗体模式很麻烦,尽量用单体的
不然子窗体多了每个来个判断不是平白浪费资源吗Top
5 楼pegtop(再回首)回复于 2005-06-02 11:45:20 得分 0
可以把打开的窗口存放在一个hash表中进行管理,每次从里面进行扫描判断是否已经打开。
不过确实挺浪费资源的。Top
6 楼GDNPC(烟锁池塘柳,炮镇海城楼)回复于 2005-06-02 11:56:36 得分 2
Dim frmTmp As Form
'搜索每个MDI子窗体一般打开的子窗体不会太多,所以不存在速度问题
For Each frmTmp In Me.MdiChildren
'if 找到你想显示的ClassFrm窗体
If TypeOf frmTmp Is ClassFrmOld Then
frmTmp.Activate()
Exit Sub
End If
Next
'如果MDI子窗体中没有你想显示的窗体
'则定义新的实例,并显示。
frmTmp = New ClassFrmNew
frmTmp.MdiParent = Me
frmTmp.Show()
关于逻辑方面自已推敲一下,改一下应该能符合你的要求。Top
7 楼zhilong(子龙)回复于 2005-06-02 15:07:21 得分 0
在执行到这条语句时 For Each set1 In Me.MdiChildren
出现错误:指定的转换无效
是怎么回事啊?Top
8 楼Sunny21()回复于 2005-06-02 16:21:46 得分 2
Private Shared formDefInstance As form1
Public Shared Property DefInstance() As form1
Get
If formDefInstance Is Nothing OrElse formDefInstance.IsDisposed Then
formDefInstance = New form1
End If
DefInstance = formDefInstance
End Get
Set(ByVal Value As form1)
formDefInstance = Value
End Set
End Property
调用时写form1.Definstance.Show
Top
9 楼dengxw(威威)回复于 2005-06-02 16:31:19 得分 5
为什么总是有人问这个问题呢?
查查以前的帖子啊
Dim i As Integer
For i = 0 To Me.MdiChildren.Length - 1
If Me.MdiChildren(i).Name = "frmBalance" Then
Me.MdiChildren(i).Activate()
Exit Sub
End If
Next
Dim NewMdiChild As New frmBalance
NewMdiChild.MdiParent = Me
NewMdiChild.Show()Top
10 楼dengxw(威威)回复于 2005-06-02 16:34:39 得分 5
看清楚下面的代码咯~
怎么每次都要有人问这个问题呢~
Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click
Dim i As Integer
For i = 0 To Me.MdiChildren.Length - 1
If Me.MdiChildren(i).Name = "frmBalance" Then
Me.MdiChildren(i).Activate()
Exit Sub
End If
Next
Dim NewMdiChild As New frmBalance
NewMdiChild.MdiParent = Me
NewMdiChild.Show()
End Sub
Top




