我有两种形式命名form1和form2:
form1由a label和a组成button.form2由a textBox和a组成button单击form1按钮时,将显示此按钮form2.一旦我按下按钮,任何输入都textBox应该写回.
我有下面的代码,但它不起作用.form1.labelform2
// Code from Form 1
public partial class Form1 : Form
{
public void PassValue(string strValue)
{
label1.Text = strValue;
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 objForm2 = new Form2();
objForm2.Show();
}
}
// Code From Form 2
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form1 objForm1 = new Form1();
objForm1.PassValue(textBox1.Text);
this.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
截图:

我怎么能意识到这一点?
mao*_*mao 16
您不能访问从中创建form2的form1.在form2 button1_Click中,您创建Form1的新实例,这与初始不同.您可以将form1实例传递给form2构造函数,如下所示:
// Code from Form 1
public partial class Form1 : Form
{
public void PassValue(string strValue)
{
label1.Text = strValue;
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 objForm2 = new Form2(this);
objForm2.Show();
}
}
// Code From Form 2
public partial class Form2 : Form
{
Form1 ownerForm = null;
public Form2(Form1 ownerForm)
{
InitializeComponent();
this.ownerForm = ownerForm;
}
private void button1_Click(object sender, EventArgs e)
{
this.ownerForm.PassValue(textBox1.Text);
this.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
就像在其他帖子中提到的那样,您将无法通过创建Form1的新实例来引用原始Form1.您可以将Form1传递给Form2的构造函数或将Form2的文本公开为公共属性,但我通常更喜欢使用委托来维护松散耦合.
// Code from Form 1
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 objForm2 = new Form2();
objForm2.PassValue += new PassValueHandler(objForm2_PassValue);
objForm2.Show();
}
public void objForm2_PassValue(string strValue)
{
label1.Text = strValue;
}
}
// Code From Form 2
public delegate void PassValueHandler(string strValue);
public partial class Form2 : Form
{
public event PassValueHandler PassValue;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (PassValue != null)
{
PassValue(textBox1.Text);
}
this.Close();
}
}
Run Code Online (Sandbox Code Playgroud)