c#.net 中如何在一个窗体中关闭另一个窗体? c#.net 中如何在一个窗体中关闭另一个窗体? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把另外一个窗体作为成员变量,form1.Close(); 我想在子窗体关闭的时候,同时关闭new子窗体的父窗体,怎么办呢? 声明一个父窗体的变量,用变量.Dispose();还可以使用 Application.Exit(); public partial class Form1 : Form { public Form1() { InitializeComponent(); } Form2 f2; private void button4_Click(object sender, EventArgs e) { if (f2 == null) { f2 = new Form2(); f2.Show(); } } private void button3_Click(object sender, EventArgs e) { if (f2 != null) { f2.Close(); f2 = null; } } } 在AddNode窗体中 public static IntPtr hand; hand = this.Handle; 在另一个窗体中点击button事件: AddNode an =(AddNode )Control.FromHandle(AddNode.hand); an.Close(); //方法一, 已测试,可行 要看你的2个窗体是什么关系了,如果是在同一个进程(准确的说应该是同一AppDomain),那么你可以想办法直接获的另外窗体对象实例的引用,然后调用Form.Close()方法即可.如果2个窗体不在同一个进程,而是2个完全不同的程序是,那么就要用Win32 API,通过P/Invoke来做:1. 通过窗体的标题用FindWindow找到对应的窗体的句柄2. 用SendMessage发送WM_CLOSE消息到那个窗体就可以了 我来说两句!!! 1)如果是一个主窗体与一个副窗体之间传信息,那么可以用构造函数,代码如下: 窗体1:namespace WindowsApplication2{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private Form2 aform2; //声明一个FORM2字段 private void button1_Click(object sender, EventArgs e) { aform2 = new Form2(this); //调用重载的FORM2构造函数, 该构造函数设定了form2中的aform1字段为“this” aform2.label1.Text = "this is set from form1"; //窗体2中lable1设为公用 aform2.Show(); } }} 窗体2:namespace WindowsApplication2{ public partial class Form2 : Form { public Form2() { InitializeComponent(); } private Form1 aform1; //声明FORM1字段 public Form2(Form1 myform1) //重载一个构造函数 { InitializeComponent(); this.aform1 = myform1; //通过该构造函数,设定aform1字段值 } private void button1_Click(object sender, EventArgs e) { this.aform1.label1.Text = "this is set from2"; //控制form1 form1.label1设为公用 } }} 2)如果是一个主窗体与多个副窗体,则应在主窗体的Designer.cs中实例化副窗体,如这样: public ShiFeiResolution.VegetableForm vegetableform = new VegetableForm();//注意它们是主窗体的属性!!! public ShiFeiResolution.XiaoMaiYuMiForm XiaoMaiYuMiform = new XiaoMaiYuMiForm(); public ShiFeiResolution.FruitForm fruitForm = new FruitForm();这样可在主窗体中直接应运。3)如果是多个主窗体与一个副窗体之间传递信息,比如说点击任何一个主窗体中的按纽,就会弹出同一个副窗体(是同一个,而不是同样的窗体),就要在主窗体中这样写: GetSoilInfo getinfo; //相当于一个temp变量 getinfo = (GetSoilInfo)Application.OpenForms["GetSoilInfo"]; if (getinfo == null) getinfo = new GetSoilInfo();//是否存在,如不存在,则创建if (checkBox2.Checked == true) getinfo.Show(); else (checkBox2.Checked == false) getinfo.Hide();这是我最近做一个项目时自己做的,望能帮上你的忙!!! DataGridViewCheckBoxColumn不能更改值 请教几个问题? 多个超级链接 socket 服务器连接多客户端 哪里有VS2005 C#中文团队版下载,知道的,给过连接. 如何在C#中连接SYBASE数据库(急、急、急、急、急、急、急) 如何让计算机一开机器就运行自己的程序? c#,提示当前上下文不存在“jieguo” 新手求助,关于c#引用AdobePDF的com控件,在其他电脑上无法运行的问题 如何在线程里使用 调用成员函数 和成员变量? 请问这两个的JS代码应该怎么写? 怎样用C#实现我和我朋友的机子上的魔兽可以联机对战
还可以使用 Application.Exit();
{
public Form1()
{
InitializeComponent();
}
Form2 f2;
private void button4_Click(object sender, EventArgs e)
{
if (f2 == null)
{
f2 = new Form2();
f2.Show();
}
} private void button3_Click(object sender, EventArgs e)
{
if (f2 != null)
{
f2.Close();
f2 = null;
}
}
}
hand = this.Handle;
在另一个窗体中点击button事件:
AddNode an =(AddNode )Control.FromHandle(AddNode.hand);
an.Close(); //方法一, 已测试,可行
如果2个窗体不在同一个进程,而是2个完全不同的程序是,那么就要用Win32 API,通过P/Invoke来做:
1. 通过窗体的标题用FindWindow找到对应的窗体的句柄
2. 用SendMessage发送WM_CLOSE消息到那个窗体就可以了
1)如果是一个主窗体与一个副窗体之间传信息,那么可以用构造函数,代码如下:
窗体1:
namespace WindowsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Form2 aform2; //声明一个FORM2字段
private void button1_Click(object sender, EventArgs e)
{
aform2 = new Form2(this);
//调用重载的FORM2构造函数, 该构造函数设定了form2中的aform1字段为“this”
aform2.label1.Text = "this is set from form1"; //窗体2中lable1设为公用
aform2.Show();
}
}
}
窗体2:namespace WindowsApplication2
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private Form1 aform1; //声明FORM1字段
public Form2(Form1 myform1) //重载一个构造函数
{
InitializeComponent();
this.aform1 = myform1; //通过该构造函数,设定aform1字段值
}
private void button1_Click(object sender, EventArgs e)
{
this.aform1.label1.Text = "this is set from2"; //控制form1 form1.label1设为公用
}
}
}
2)如果是一个主窗体与多个副窗体,则应在主窗体的Designer.cs中实例化副窗体,如这样:
public ShiFeiResolution.VegetableForm vegetableform = new VegetableForm();//注意它们是主窗体的属性!!!
public ShiFeiResolution.XiaoMaiYuMiForm XiaoMaiYuMiform = new XiaoMaiYuMiForm();
public ShiFeiResolution.FruitForm fruitForm = new FruitForm();
这样可在主窗体中直接应运。
3)如果是多个主窗体与一个副窗体之间传递信息,比如说点击任何一个主窗体中的按纽,就会弹出同一个副窗体(是同一个,而不是同样的窗体),就要在主窗体中这样写:
GetSoilInfo getinfo; //相当于一个temp变量
getinfo = (GetSoilInfo)Application.OpenForms["GetSoilInfo"]; if (getinfo == null)
getinfo = new GetSoilInfo();//是否存在,如不存在,则创建
if (checkBox2.Checked == true) getinfo.Show();
else (checkBox2.Checked == false)
getinfo.Hide();这是我最近做一个项目时自己做的,望能帮上你的忙!!!