将变量从Form2发送到Form1

时间:2014-11-20 18:23:08

标签: c# winforms

我想知道如何将变量从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吗?

谢谢!

2 个答案:

答案 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");
        }
    }

}