我有以下内容: 我有一个有两种形式的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。
答案 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