c#.net 中如何在一个窗体中关闭另一个窗体?

解决方案 »

  1.   

    把另外一个窗体作为成员变量,form1.Close();
      

  2.   

    我想在子窗体关闭的时候,同时关闭new子窗体的父窗体,怎么办呢?
      

  3.   

    声明一个父窗体的变量,用变量.Dispose();
    还可以使用 Application.Exit();
      

  4.   

    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;
                }
            }
        }
      

  5.   

      在AddNode窗体中 public static IntPtr hand; 
      hand = this.Handle;        
      在另一个窗体中点击button事件:
      AddNode an =(AddNode )Control.FromHandle(AddNode.hand);
        an.Close();    //方法一, 已测试,可行
      

  6.   

    要看你的2个窗体是什么关系了,如果是在同一个进程(准确的说应该是同一AppDomain),那么你可以想办法直接获的另外窗体对象实例的引用,然后调用Form.Close()方法即可.
    如果2个窗体不在同一个进程,而是2个完全不同的程序是,那么就要用Win32 API,通过P/Invoke来做:
    1. 通过窗体的标题用FindWindow找到对应的窗体的句柄
    2. 用SendMessage发送WM_CLOSE消息到那个窗体就可以了
      

  7.   

    我来说两句!!!
     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();这是我最近做一个项目时自己做的,望能帮上你的忙!!!