簡體   English   中英

將變量從Form2發送到Form1

[英]Sending variables from Form2 to Form1

我想知道如何將變量從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?

謝謝!

我想說,做這種事情的一種好方法是通過公開事件:

在第二種形式中,添加一個事件:

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

該設置聽起來有點像設置對話框,在該對話框中,直到關閉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");
        }
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM