如图,1:我点击N次"采购进货"模块系统就会出现在N次这个窗口,我用的show()来显示窗体的为了是让他在MDI
父窗体内,  有什么方法可以实现点击"采购进货"模块后只显示一次,再点击后不再重复显示"采购进货"模块并且要在父窗体内??2:如图 我要怎么才实现我点击出来的窗体以  图上类似导航条一样显示??

解决方案 »

  1.   

    第一个问题用ShowDialog(),可以实现不重复但是不在MDI窗体内
      

  2.   

    //单例模式
     private static 采购进货 frm;
            private 采购进货()
            {
                InitializeComponent();
            }
            public static 采购进货createForm()
            {
                try
                {
                    if (frm == null || frm.IsDisposed)
                    {
                        frm = new 采购进货();
                    }
                }
                catch
                { }
                frm.BringToFront();
                return frm;
            }//父窗体内
     采购进货.createForm().Show();
      

  3.   

    第二个问题别人好像是用第三方控件做的,你可以用tabcontrol控件实现类似功能
      

  4.   

    您的方法,不行,跟用ShowDialog()一样
      

  5.   

    采购进货customer = new 采购进货();
                采购进货.MdiParent = this;
                采购进货.Show();这种方法就可以实现,采购进货这个模块在主窗体里面,也就是MD窗体。  但是《采购进货》这个模块点击N 次显示 N次求解决???
      

  6.   

    您的方法,不行,跟用ShowDialog()一样你把他的frm.BringToFront();注释掉就行了,因为这句话给把窗口置为最前,所以效果和shoudialog差不多了
      

  7.   

            static OrderList form = null;
            public static OrderList GetInstance()
            {
                if (form == null || form.IsDisposed)
                {
                    form = new OrderList();
                }
                return form;
            }
    OrderList ol = OrderList.GetInstance();
    ol .MdiParent = this;
    ol .Show();
      

  8.   

    您的方法,不行,跟用ShowDialog()一样你把他的frm.BringToFront();注释掉就行了,因为这句话给把窗口置为最前,所以效果和shoudialog差不多了不行,显示出来采购进货模块在外面不在里面
    还是楼主厉害可以实现我想要的效果
      

  9.   

    第一个问题:
    void OpenChildrenWindow(Form childrenWindow)
            {
                foreach (Form exitForm in MdiChildren)
                {
                    //如果子窗体存在,激活子窗体 
                    if (exitForm.Name == childrenWindow.Name)
                    {
                        exitForm.Activate();
                        childrenWindow.Dispose();
                        childrenWindow = null;
                        return;
                    }
                }
                childrenWindow.MdiParent = this;
                childrenWindow.Show();
            }第二个问题:
    使用: devexpress的xtraTabbedMdiManager就可以
      

  10.   

    实现楼主第二种 功能 的方法  可以 了解 一下 taskbar 这个控件
      

  11.   

    winfrom  中不存在你说的控件
      

  12.   

    第一个问题用 11楼回答的那个就可以,点击菜单或者按钮的时候用 OpenChildrenWindow(FrmPurchase),FrmPurchase是指你那个采购进货窗体的类名称
    实现第二个我用的是DockPanel 这个第三方控件
      

  13.   

    winfrom  中不存在你说的控件
    你可以 自定义 控件  继承panel
      

  14.   

    遍历中的MdiChildren在winform  不存在怎么回事?
      

  15.   

    哦,  11楼的那个MdiChildren在我电脑上运行不存在
      

  16.   

    把方法放到主窗体的类代码中主窗体必须是MDI的主窗体,就是把主窗体的  IsMdiContainer  设置为True
      

  17.   


    设置了还是不存在MdiChildren
      

  18.   

    我知道问题所在了  我在前面加public  static  就出错了