[初学VB.NET]如何防止重复打开MDI子窗体

原创 2004年11月01日 20:56:00
VB.NET中,在访问窗体之前,你必须进行窗体实例化,然后才能打开,如:
           Dim frm1 As New Form1
          ' frm1.MdiParent = Me ' 定义MDI子窗体
           frm.Show() '打开窗体

如果在项目中有多处代码访问同一窗体,都这样的话,则会创建出不同的实例。如重防止重复打开MDI子窗体的实例呢?下面的代码可以帮你完成:

Dim frm1As New Form1
CheckForm(frm1, "Form1")

'*****************************************************************************
'*过程名称:CheckForm
'*参数说明:MDIChildForm——需检测的窗体;MDIChildFormName ——检测窗体的名字
'*功能说明:首先检测是否有MDI子窗体,如果没有,则创该MDI子窗体的窗体实例
'*                    如果有,则检测当中有没有其窗体实例,有则激活;没有则创建其窗体实例
'*****************************************************************************
Private Sub CheckForm(ByVal MDIChildForm As Form, ByVal MDIChildFormName As String)
         If Me.MdiChildren.Length < 1 Then
              '如果没有任何一个MDI子窗体,则创该MDI子窗体的窗体实例
            ShowForm(MDIChildForm )
            Exit Sub
        Else
             Dim x As Integer
             Dim frmyn As Boolean
             For x = 0 To (Me.MdiChildren.Length) - 1
                   Dim tempChild As Form = CType(Me.MdiChildren(x), Form)
                   If tempChild.Name = MDIChildFormName Then
                       frmyn = True
                      '检测到有该MDI子窗体,设为TRUE 并退出循环
                      Exit For
                   Else
                      frmyn = False
                   End If
            Next
           If frmyn = False Then
              '在打开的窗体中没检测到则新建
                ShowForm(tempForm)
            Else
               '在打开的窗体中检测到则激活
                Dim MDIChildFrm As Form = CType(Me.MdiChildren(x), Form)
                MDIChildFrm .Activate()
              End If
         End If
End Sub

'**************************************************
'*过程名称:ShowForm
'*参数说明:MDIChildForm ——需创建实例的窗体
'*功能说明:创建窗体实例
'**************************************************
Private Sub ShowForm(ByVal MDIChildForm As Form)
           Dim MDIChildFrm  As Form = MDIChildForm
           MDIChildFrm.MdiParent = Me ' 定义MDI子窗体
           MDIChildFrm.Show() '打开窗体
End Sub

VB.NET 如何防止重复打开MDI子窗体

  VB.NET中,在访问窗体之前,你必须进行窗体实例化,然后才能打开,如:           Dim frm1 As New Form1           frm1.MdiParent = Me...
  • sundenskyqq
  • sundenskyqq
  • 2009年12月19日 09:55
  • 2076

判断MDI窗体的子窗体是否存在

//***************************************************************************//函 数名: CreateForm //返 ...
  • wc1000
  • wc1000
  • 2015年07月18日 16:03
  • 932

6种方法使MDI父窗体调用子窗体(子窗体同时只能显示一个)

种方法使MDI父窗体调用子窗体(子窗体同时只能显示一个)有一个MDI窗体叫MainForm,多个子窗体,如Form1,Form2……要使子窗体同时只能显示一个,那么方法1dim Form1 as ne...
  • sanwaxubin
  • sanwaxubin
  • 2008年06月21日 12:56
  • 1927

[初学VB.NET]如何防止重复打开MDI子窗体

VB.NET中,在访问窗体之前,你必须进行窗体实例化,然后才能打开,如:           Dim frm1 As New Form1           frm1.MdiParent = Me ...
  • usersmj
  • usersmj
  • 2004年11月01日 20:56
  • 1584

如何实现MDI窗体不重复打开同一个子窗体?

使用MDI窗体时,默认是可以多次打开同一个子窗体的,那么如何控制不重复打开同一个子窗体呢?MDI窗体有个重要属性——MdiChildren,该属性表示MDI窗体打开的子窗体的数组,循环遍历该数组,可以...
  • JAVAbccd
  • JAVAbccd
  • 2017年12月26日 14:41
  • 125

今天把以前解决的MDI子窗体,多次打开同一窗体代码共享一下.逻辑不够完善但是解决了问题

private void ultraExplorerBar1_ItemClick(object sender, Infragistics.Win.UltraWinExplorerBar.ItemEve...
  • czmtxz
  • czmtxz
  • 2006年02月07日 09:05
  • 996

VB.NET章鱼哥出品—如何解决MDI子窗体被父窗体中的控件覆盖的问题

最近有个网友问我这个问题,我就上网搜了下,结果很失望,有几个在CSDN上发的求助帖,看到最后都没有找到明确的答案。这里笔者在网上找到了API函数SetParent(),并对网上的错误进行了修改,并给出...
  • zhangyubishoulin
  • zhangyubishoulin
  • 2014年11月06日 06:40
  • 2357

C#中避免相同MDI子窗口重复打开的方法

 方法一: 直接检测是否已经打开此MDI窗体 // 是否已经打开了?(用循环来判断) foreach (Form childrenForm in this.MdiChildren) { //检测是不是...
  • lovegod12
  • lovegod12
  • 2009年01月09日 09:47
  • 512

使用C#打开新窗口关闭旧窗口的方法;winform中防止重复打开多个相同子窗体

1、网上流传最广的应该是隐藏法了,原理就是把旧窗口隐藏掉,再打开新窗口。 具体的代码如下: //在旧窗口中的合适位置写这些代码 //新建一个NewForm窗口(NewForm是自己定义的...
  • kongwei521
  • kongwei521
  • 2011年10月13日 21:38
  • 1966

C#多次单击按钮只能打开一次子窗体及创建MDI子窗体

我目前做了一个主窗体,里面有个按钮,当点击按钮后弹出另一个子窗体;但我把子窗体最小化后再点击主窗体上的按钮,又会弹出一个新的子窗体。我想问下,该怎样实现 无论点击多少次按钮,都只是显示一个子窗体。...
  • Fan_lizhou
  • Fan_lizhou
  • 2014年09月29日 11:37
  • 1558
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[初学VB.NET]如何防止重复打开MDI子窗体
举报原因:
原因补充:

(最多只允许输入30个字)