我想知道如何将变量从Form2发送到Form1。我在Form1中有一个文本框和按钮,在Form2中有一个文本框和按钮。我的应用程序从Form1开始,textbox1为空,然后单击按钮Form2将出现。在Form2中,我想写数字,然后单击按钮将其发送到Form1文本框。
我正在尝试这段代码,但我不知道如何解决它。
Form1代码:
public static int number;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 form = new Form2();
form.Show();
}
Form2代码
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form1.number = textBox1.Text;
this.Visible = false;
}
现在我在Form1中有一个名为number的变量,它包含Form2 Textbox的值,对吧?但是我怎么说:textbox1.text(Form1)=那个动作之后的数字?我需要以某种方式刷新Form1吗?
谢谢!
答案 0 :(得分:1)
我会说一个很简单的方法来做这种事情,就是通过公开活动:
在表单二中,添加一个事件:
public partial Class Form2
{
public event Action<string> SomethingHappened;
...
我们需要在Form2
上触发事件 - 通知订阅者:
//On Form2
private void button1_Click(object sender, EventArgs e)
{
if(SomethingHappened != null)
SomethingHappened (textBox1.Text);
}
然后,在创建'订阅'父表单Form1
以对子表单执行操作时:
Form2 form = new Form2();
//Here, we assign an event handler
form.SomethingHappened += (string valueFromForm2) =>
{
//Event handled on Form1
this.Number = valueFromForm2;
};
答案 1 :(得分:0)
设置听起来有点像设置对话框,在Form2关闭之前,您无法继续使用Form1。
如果是这种情况,那么更像他的东西在Form1中是合适的:
public partial class Form1 : Form
{
private int number = 411;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.textBox1.Enabled = false;
this.textBox1.Text = number.ToString();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2(this.number);
if (f2.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
this.number = f2.Number;
this.textBox1.Text = this.number.ToString();
}
}
}
使用Form2看起来像:
public partial class Form2 : Form
{
public Form2(int number)
{
InitializeComponent();
this.textBox1.Text = number.ToString();
}
private int number = 0;
public int Number
{
get { return this.number; }
}
private void btnOK_Click(object sender, EventArgs e)
{
int value;
if (int.TryParse(this.textBox1.Text, out value))
{
this.number = value;
this.DialogResult = System.Windows.Forms.DialogResult.OK;
}
else
{
MessageBox.Show(textBox1.Text, "Invalid Integer");
}
}
}