问题描述
我不想弹出那么多窗体,按一下“文件”弹出一个,再按下,就不弹了,可我按了4下,就出来4个窗体,有什么办法解决?有代码发代码,那什么boolisOpen=false;这类方法我试过了,不行,还有什么别的,能设置窗体属性的就说设置什么属性,用代码设置就发代码。
解决方案
解决方案二:
不要用SHOW,用showdialog
解决方案三:
非顶级窗体不能显示为模式对话框。在调用showDialog之前应从所有父窗体中移除该窗体。
解决方案四:
我这是MDI窗体,不是SDI
解决方案五:
判断该窗提是否已经存在,存在就RETURN。。。
解决方案六:
设个参数就可以搞定了啦
解决方案七:
怎么设参数?发代码,谢谢了!
解决方案八:
子窗体体设置成父窗体的全局变量,在要显示的时候加个判断:比如子窗体名为childFormif(childForm==null){childForm=newChildForm();}childForm.show();或者直接用ShowDialog()
解决方案九:
PatrickPan
首先是通过子窗体类型名来判断是否打开新的子窗体,还是把原有的子窗体进行显示。usingSystem.Reflection;///<summary>///Openchildwindow///</summary>///<paramname="ChildTypeString"></param>privatevoidOpenWindow(stringChildTypeString){FormmyChild=null;if(!ContainMDIChild(ChildTypeString)){//GetcurrentprocessassemblyAssemblyassembly=Assembly.GetExecutingAssembly();//CreatedatatypeusingtypestringTypetypForm=assembly.GetType(ChildTypeString);//Createobjectusingtype's"InvokeMember"methodObjectobj=typForm.InvokeMember(null,BindingFlags.DeclaredOnly|BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.CreateInstance,null,null,null);//Showchildformif(obj!=null){myChild=objasForm;myChild.MdiParent=this;myChild.Show();myChild.Focus();}}}///<summary>///Searchmdichildformbyspecifictypestring///</summary>///<paramname="ChildTypeString"></param>///<returns></returns>privateboolContainMDIChild(stringChildTypeString){FormmyMDIChild=null;foreach(Formfinthis.MdiChildren){if(f.GetType().ToString()==ChildTypeString){//founditmyMDIChild=f;break;}}//Showtheexistformif(myMDIChild!=null){myMDIChild.TopMost=true;myMDIChild.Show();myMDIChild.Focus();returntrue;}elsereturnfalse;}以上两部分就可以对于每个子窗体只创建一个实例。那么调用以上代码就非常简单了。如://Openamdichildformwhichtypenamed"MDIChild"OpenWindow(typeof(MDIChild).ToString());
解决方案十:
7楼的对,用ShowDialog()简单点
解决方案十一:
写一个单件模式
解决方案十二:
无法访问已释放的对象。对象名:“InsertData”。7楼的大哥,别忽悠我行不?第一次那样是不多弹了,可我关了再按文件,就异常````代码写死了啊
解决方案十三:
楼主大哥,你的InsertData是怎么定义的?要把它作为类的变量,而不是属于某个方法的局部变量。
解决方案十四:
办法是有,但都不是什么好办法等待高手
解决方案十五:
你新建一个Form,你看看它的代码,如果没有Windows窗体的设计代码,那就是我错了
解决方案:
mCh=newfrmChild;if(mCh.Created){mCh.BringToFront();}else{mCh=newfrmChild();mCh.MdiParent=父窗体;mCh.Show();}
解决方案:
写错一点,补充一下。frmChildmCh=newfrmChild();if(mCh.Created){mCh.BringToFront();}else{mCh=newfrmChild();mCh.MdiParent=父窗体;mCh.Show();}
解决方案:
publicpartialclassfrmMain:Form{.........frmChildmCh=newfrmChild();//是这里先定义一下。}以下代码是在frmMain里打开子窗体时使用。if(mCh.Created){mCh.BringToFront();}else{mCh=newfrmChild();mCh.MdiParent=this;mCh.Show();}
解决方案:
kankan
解决方案:
可以写这样一个方法解决问题,其中第一个参数是mdi父窗体,第二个参数是mdi子窗体的name属性。privatevoidShowSubForm(FormParentForm,stringSubFormName){FormchildForm;boolflag=false;if(ParentForm.MdiChildren.Length!=0){intchildCount=ParentForm.MdiChildren.Length;for(inti=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();}}然后调用该方法就可以了。