您的位置:首页 > 编程语言 > C#

C# 打开子窗体(from2),如何关闭父窗体(from1)解决方案之一

2009-08-25 13:23 453 查看
首先要说明,整个程序是建立在单线程之上的,也就是说建立窗体是从父窗体建立的,

可以使用:

frmMain form=new frmMain ();

form.Show();

来家里任意多个窗体,这些窗体都是在form1存在的前提下存在的.这些新建的窗体和父窗体所有的属性是完全一样的。

我们想要关闭当前的子窗体就要改变某些属性,让其与父窗体有所区别。

接下来我们为了区分子窗体和父窗体改变子窗体的某些属性,这里改变的是子窗体的名字

FormCollection fmc = System.Windows.Forms.Application.OpenForms;//收集当前打开的所有窗口

i = System.Windows.Forms.Application.OpenForms.Count-1;//大昂前打开的所有窗口的数目,减去一就是新建窗体的数目

fmc[i].Name = "Form" + i.ToString();//改变新建窗体的名字,直接变成form1,form2依次递增。

这些代码都是在新建窗体的函数里面的。

那么接下来就是怎么关闭窗体的问题了,有了区别的标志想要关闭就很容易了。关闭函数为;

private void 关闭ToolStripMenuItem1_Click(object sender, EventArgs e)

{

Form currentform;

form.Activate();//激活鼠标指向的窗体并给于焦点

currentform = System.Windows.Forms.Form.ActiveForm;//获得当前鼠标操作的窗体

FormCollection fmc = System.Windows.Forms.Application.OpenForms;//收集打开的所有窗体

string name;

name = currentform.Name;//获得当前鼠标操作的窗体的名称属性值

if (name != frmMain.form.Name)//判断是否和主窗体的名称相同如果不同则关闭当前窗体

{

this.Close();

}

else

fmc[0].Hide();//否则吧主窗体隐藏掉,因为这是单线程的程序,关掉主窗体程序退出。

}

PS:目前在完善这个方案在不建立多线程的情况下,想在关掉最后一个子窗体的时候能够推出整个的程序,而不是程序移植隐藏着,在后台运行。要是某位大大有好方法希望可以赐教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: