当前位置:编程学习 > C#/ASP.NET >>

C# WinForm窗体

我不想弹出那么多窗体,按一下“文件”弹出一个,再按下,就不弹了,可我按了4下,就出来4个窗体,有什么办法解决?有代码发代码,那什么 
bool isOpen = false;
这类方法我试过了,不行,还有什么别的,能设置窗体属性的就说设置什么属性,用代码设置就发代码。 --------------------编程问答-------------------- 不要用SHOW,用showdialog --------------------编程问答-------------------- 非顶级窗体不能显示为模式对话框。在调用 showDialog 之前应从所有父窗体中移除该窗体。 --------------------编程问答-------------------- 我这是MDI窗体,不是SDI --------------------编程问答-------------------- 判断该窗提是否已经存在,存在就RETURN。。。 --------------------编程问答-------------------- 设个参数就可以搞定了啦 --------------------编程问答-------------------- 怎么设参数?发代码,谢谢了! --------------------编程问答-------------------- 子窗体体设置成父窗体的全局变量,在要显示的时候加个判断:
比如子窗体名为childForm
if(childForm == null)
{
    childForm = new ChildForm();
}
childForm.show();


或者直接用ShowDialog() --------------------编程问答--------------------
PatrickPan
首先是通过子窗体类型名来判断是否打开新的子窗体,还是把原有的子窗体进行显示。 

        using   System.Reflection; 

        ///   <summary> 

        ///   Open   child   window 

        ///   </summary> 

        ///   <param   name= "ChildTypeString "> </param> 

        private   void   OpenWindow(   string   ChildTypeString   ) 

        { 

                Form   myChild   =   null; 

                if(   !ContainMDIChild(   ChildTypeString   )   ) 

                { 

                        //   Get   current   process   assembly 

                        Assembly   assembly   =   Assembly.GetExecutingAssembly(); 

  

                        //   Create   data   type   using   type   string 

                        Type   typForm   =   assembly.GetType(   ChildTypeString   ); 

  

                        //   Create   object   using   type 's   "InvokeMember "   method 

                        Object   obj   =   typForm.InvokeMember( 

                                null,   

                                BindingFlags.DeclaredOnly   |   

                                BindingFlags.Public   |   BindingFlags.NonPublic   |   

                                BindingFlags.Instance   |   BindingFlags.CreateInstance,   

                                null,   

                                null, 

                                null   ); 

  

                        //   Show   child   form   

                        if(   obj   !=   null   ) 

                        { 

                                myChild   =   obj   as   Form; 

                                myChild.MdiParent   =   this; 

                                myChild.Show(); 

                                myChild.Focus(); 

                        } 

                } 

        } 

  

        ///   <summary> 

        ///   Search   mdi   child   form   by   specific   type   string 

        ///   </summary> 

        ///   <param   name= "ChildTypeString "> </param> 

        ///   <returns> </returns> 

        private   bool   ContainMDIChild(   string   ChildTypeString   )   

        { 

                Form   myMDIChild   =   null; 

                foreach(Form   f   in   this.MdiChildren)   

                {   

                        if(   f.GetType().ToString()   ==   ChildTypeString   )   

                        {   

                                //   found   it   

                                myMDIChild   =   f;   

                                break;   

                        }   

                }   

  

                //   Show   the   exist   form 

                if(   myMDIChild   !=   null)   

                {   

                        myMDIChild.TopMost   =   true; 

                        myMDIChild.Show();   

                        myMDIChild.Focus();   

                        return   true; 

                }   

                else 

                        return   false; 

        } 

  

以上两部分就可以对于每个子窗体只创建一个实例。那么调用以上代码就非常简单了。 

如: 

        //Open   a   mdi   child   form   which   type   named   "MDIChild " 

        OpenWindow(   typeof(   MDIChild   ).ToString()   ); 
--------------------编程问答-------------------- 7楼的对,
用ShowDialog()简单点 --------------------编程问答-------------------- 写一个单件模式 --------------------编程问答-------------------- 无法访问已释放的对象。
对象名:“InsertData”。

7楼的大哥,别忽悠我行不?第一次那样是不多弹了,可我关了再按文件,就异常````
代码写死了啊 --------------------编程问答-------------------- 楼主大哥,你的InsertData是怎么定义的?要把它作为类的变量,而不是属于某个方法的局部变量。 --------------------编程问答-------------------- 办法是有,但都不是什么好办法
等待高手 --------------------编程问答-------------------- 你新建一个Form,你看看它的代码,如果没有Windows窗体的设计代码,那就是我错了 --------------------编程问答-------------------- mCh =new frmChild;
if (mCh.Created)
{
  mCh.BringToFront();
}
else
{
  mCh = new frmChild();
  mCh.MdiParent = 父窗体;
  mCh.Show();
}
--------------------编程问答-------------------- 写错一点,补充一下。
frmChild mCh =new frmChild(); 
if (mCh.Created) 

  mCh.BringToFront(); 

else 

  mCh = new frmChild(); 
  mCh.MdiParent = 父窗体; 
  mCh.Show(); 

--------------------编程问答-------------------- public partial class frmMain : Form
{
       .........
       frmChild mCh =new frmChild(); //是这里先定义一下。
}

以下代码是在frmMain里打开子窗体时使用。
if (mCh.Created)  
{  
  mCh.BringToFront();  
}  
else  
{  
  mCh = new frmChild();  
  mCh.MdiParent = this;  
  mCh.Show();  
}  
--------------------编程问答-------------------- kankan --------------------编程问答-------------------- 可以写这样一个方法解决问题,其中第一个参数是 mdi 父窗体,第二个参数是 mdi 子窗体的name属性。
private void ShowSubForm(Form ParentForm, string SubFormName)
        {
            Form childForm;
            bool flag = false;

            if (ParentForm.MdiChildren.Length != 0)
            {
                int childCount = ParentForm.MdiChildren.Length;
                for (int i = 0; i < childCount; i++)
                {
                    childForm = ParentForm.MdiChildren[i];
                    if (childForm.Name == SubFormName)
                    {
                        flag = true;
                        childForm.Activate();
                        break;
                    }
                }
            }
            if (!flag)
            {
                childForm = (Form)System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("在这里写命名空间名称" + SubFormName);
                if (childForm == null)
                {
                    MessageBox.Show("没有找到窗口!");
                    return;
                }
                childForm.MdiParent = ParentForm;
                childForm.Show();
            }
        }
然后调用该方法就可以了。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,