Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将变量从Form2发送到Form1_C#_Winforms - Fatal编程技术网

C# 将变量从Form2发送到Form1

C# 将变量从Form2发送到Form1,c#,winforms,C#,Winforms,我想知道如何将变量从Form2发送到Form1。我在表格1中有一个文本框和按钮,在表格2中有一个文本框和按钮。我的应用程序从Form1开始,textbox1为空,单击按钮Form2将显示。在Form2中,我想写下数字,然后单击按钮将其发送到Form1文本框 我正在尝试这个代码,但我不知道如何解决它 表格1代码: public static int number; public Form1() { InitializeComponent(); } private void button1_

我想知道如何将变量从Form2发送到Form1。我在表格1中有一个文本框和按钮,在表格2中有一个文本框和按钮。我的应用程序从Form1开始,textbox1为空,单击按钮Form2将显示。在Form2中,我想写下数字,然后单击按钮将其发送到Form1文本框

我正在尝试这个代码,但我不知道如何解决它

表格1代码:

public static int number;
public Form1()
{
    InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
    Form2 form = new Form2();
    form.Show();
}
表格2代码

public Form2()
{
    InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
    Form1.number = textBox1.Text;
    this.Visible = false;
}
现在我在Form1中有一个名为number的变量,它包含Form2文本框的值,对吗?但我该如何说:textbox1.text(Form1)=动作后的数字?我需要刷新Form1吗


谢谢

我想说,做这类事情的一个简单方法是通过举办一次公开活动:

在表格2中,添加一个事件:

public partial Class Form2
{
    public event Action<string> SomethingHappened;
...
然后,在创建“订阅”父窗体
Form1
以对子窗体执行操作时:

Form2 form = new Form2();

//Here, we assign an event handler
form.SomethingHappened += (string valueFromForm2) => 
{
    //Event handled on Form1
    this.Number = valueFromForm2;
};

这个设置听起来有点像一个设置对话框,在关闭Form2之前,您无法在Form1中继续

如果是这种情况,那么更像他的东西在表格1中是合适的:

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

}

他的表单不是模态对话框。@没错,描述中没有明确说明它是……但作者可能没有很好地描述它,或者没有意识到他们在寻找什么。我可能错了;这不是第一次了
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");
        }
    }

}