在C#中的两个表单之间进行通信

时间:2015-01-09 06:48:05

标签: c# winforms textbox

我有以下内容: 我有一个有两种形式的GUI。 Form2通过Form1按钮打开。两种形式都有文本框,我希望它们相互通信(一种形式可以从另一种形式获取文本框的条目)。我现在在Form2中所做的是:

    private Form1 m_form = null;

    public Form2(Form1 f)
    {
        InitializeComponent();

        m_form = f;
    }

和Textboxes函数如:

    public String getLocation()
    {
        return LocationBox.Text;
    }

工作正常。因此Form2可以读取Form1中的条目。现在我希望Form1从Form2读取文本框条目并尝试相同的事情(这可能是错误的):

    private Form2 m_form2 = null;

    public Form1(Form2 f2) 
    {
        InitializeComponent(); 
        m_form2 = f2;
    }

然后是一些函数,比如我发布的函数,但每当我想读取Form2的文本框时,我会得到“null”和“NullReference”异常。错误在哪里?

编辑:好的,我解决了一个问题。添加

        Form2 m_form2 = new Form2(this);
        m_form2.Show();

解决了NullReferenceException的问题。没有线       m_form2.Show()

它传递空字符串,但现在每按一次按钮就会出现form2。

3 个答案:

答案 0 :(得分:2)

我认为问题是你永远不会调用构造函数public Form1(Form2 f2)。当您从第一个打开Form2时,您必须在Form1的实例中保存该实例:

void createForm2() {
    Form2 frm2 = new Form2(this);
    this.m_form2 = frm2;
}

答案 1 :(得分:1)

在Form1中尝试:

this.TextBoxName.Text = m_Form2.getLocation();

或在Form2中:

m_form.TextBoxName.Text = this.getLocation();

注意 在表单1中,当调用表单2时:

m_Form2 = new Form2(this);
//do anything with your code

答案 2 :(得分:1)

要在两个表单之间发送值,您可以

1→在第二个表单的构造函数中发送值。您可以创建一个参数化构造函数,并在初始化表单时发送值:

Form1 obj = new Form1(Object);

2→您可以在第二种形式中参考您的第一个表格。

第二种形式,

public Form1 objForm1;
and in First Form,

Form2 objForm2=new Form2();
Form2.objForm1=this;

然后你可以使用Form2的objForm1来引用Form1的文本框或任何控件。

考虑您要将所有值从Form1发送到Form2

在第二种形式中,您必须有一个Form1类型的变量,它引用了prev形式。所以在第二种形式,

public Form1 objForm1;
and then you need to send the current instance of the Form1 to Form2 as

Form2 objForm2=new Form2();
Form2.objForm1=this;

即。您在Form2中创建的objForm1引用此Form1实例。

现在,在Form2中,您可以使用Form1的任何控件或变量作为

Form1.TextBox1或Form1.Variable