CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VB.NET

如何使一个子窗体只打开一次?

楼主zhilong(子龙)2005-06-01 21:54:07 在 .NET技术 / VB.NET 提问

如何使一个子窗体只打开一次?如何判断子窗体已经打开? 问题点数: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

相关问题

  • 如何在父窗体关闭所有打开的子窗体?
  • MDI窗体中打开子窗体时 如何让子窗体的位置固定?
  • 用JAVASCRIPT如何判断父窗体的子窗体是否打开,如果没有打开则打开子窗体,如果已经打开,则不打开
  • 如何知道MDI窗体是否有子窗体打开着呢?20分呀?
  • 在线求救,如何在MDI窗体中正确打开子窗体?
  • MDI窗体中,如何判断某个具体的子窗体是否打开?
  • MDI窗体控制,如何判断当前有子窗体打开?急!
  • 用window.open 打开子窗体后,想关闭父窗体如何实现?
  • ShowDialog(this)方法打开的子窗体,如何调用父窗体的方法?
  • 如何知道一个MID子窗体是打开的?

关键词

  • me
  • 窗体
  • frmtmp
  • mdichildren
  • formdefinstance
  • newmdichild
  • frmbalance
  • fm
  • mdiparent
  • 打开

得分解答快速导航

  • 帖主:zhilong
  • tl_pear
  • GDNPC
  • Sunny21
  • dengxw
  • dengxw

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo