在表格之间跳跃

时间:2011-05-07 17:29:14

标签: c# winforms

我们可以从 Form1 访问 Form2 通过这种方式:

在Form1中:

private buttonForm1_click(object sender,EventArgs e)
{
 Form2  frm2 = new Form2()
 frm2.show()
 this.hide()
}

在Form2中,我们想要访问它已隐藏的 Form1

在Form2中:

private buttonForm2_click(object sender,EventArgs e)
{
 //What Can I DO ?
 //I Don't Want to Create Another Instance From Form1 

}

5 个答案:

答案 0 :(得分:1)

如果您希望两个表单可以互相访问,那么他们需要以某种方式了解彼此。一种方法是父母/子女关系。但是,这可能不是你想要做的。另一种选择是以这种方式对每个表单的引用进行限定,以便两者都可以访问它们。

第三种方法是在打开Form2时将Form1的引用传递给Form2。在Form2中创建Form1变量并在从Form1打开Form2时填充它。当你希望两个表单可以相互访问但它不能很好地扩展时,这将起作用。

答案 1 :(得分:1)

您可以将Form1对象传递给Form2构造函数:

public partial class Form1
{
    // ...

    private buttonForm1_click(object sender,EventArgs e)
    {
       Form2  frm2 = new Form2(this)
       frm2.show()
       this.hide()
    }

    // ...
}

public partial class Form2
{
    private Form1 _form1;

    public Form2(Form1 form1)
    {
        InitializeComponents();

        _form1 = form1;
    }

    // ...

    private buttonForm2_click(object sender,EventArgs e)
    {
        _form1.Show();
    }
}

答案 2 :(得分:1)

在Form1上:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Form1Form2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var f = new Form2(this);
            f.Show();
        }
    }
}

在Form2上:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Form1Form2
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        Form1 _f1 = null;
        public Form2(Form1 f) : this()
        {
            _f1 = f;
        }


        private void button1_Click(object sender, EventArgs e)
        {
            _f1.Text = "Nice!";
        }
    }
}

答案 3 :(得分:0)

简单的答案是在Form2构造函数中传递对Form1的引用。

这样,在Form2中,您可以使用一个引用并访问其控件或调用其中的方法。

答案 4 :(得分:0)

如果您没有创建表单的多个副本,我发现这是最简单的方法。让表单本身创建一个句柄:

public partial class Form1
{
    public static Form1 Current;

    public Form1()
    {
        InitializeComponents();
        Current = this;
    }
}

public partial class Form2
{
    public static Form2 Current;

    public Form2()
    {
        InitializeComponents();
        Current = this;
    }

    private buttonForm2_click(object sender,EventArgs e)
    {
        Form1.Current.Show();
    }
}

如果人们关闭表格会变得有点复杂。所以在Closing处理程序中(如果你想保留句柄):

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
    Visible = false;
    WindowState = FormWindowState.Minimized;
}

e.Cancel将使表单不会被实际销毁,需要您再次创建它。虽然如果你想要它被破坏,你总是可以通过将Current变量转换为Current属性来再次创建一个新属性,该属性创建一个新的get;

相关问题