c#中从一种形式到另一种形式的文本

本文关键字:另一种 文本 一种 | 更新日期: 2023-09-27 18:14:53

我使用的是winforms。我有两种形式,每种形式都包含一个TextBox和一个Button。我的目标是从form1上的TextBoxform2上的文本框的内容单击一个按钮。我还想关闭form1,只显示form2与在form1上的文本框中键入的内容。

这是我目前所知道的。我的代码的问题是内容不显示在form2

this.Hide();
Form2 f2 = new Form2();
f2.ShowDialog();
f2.textBox1.Text = textBox1.Text;           
this.Close();
//close form1

c#中从一种形式到另一种形式的文本

假设您提供的代码来自您的按钮单击事件。它可以被简单地修改如下以得到你需要的。

Form2 f2 = new Form2();
f2.textBox1.Text = textBox1.Text;  
f2.Show();
this.Close();

然而,如果你的Form1是主要的形式,即它是从Program.cs加载的。您的应用程序将在this.Close()

之后退出

我也建议你不要使Form2的textBox1。保留属性private,并创建一个函数来修改它的值,例如:

public void SetTextBox1Text(string text)
{
    textBox1.Text = text;
}

你的Form1按钮点击事件:

Form2 f2 = new Form2();
f2.SetTextBox1Text(textBox1.Text);  
f2.Show();
this.Close();

首先在Form2.cs中添加一个属性来暴露您的私有textBox1。

public partial class Form2 : Form
{
    //this is a property
    public string TextBox1
    {
        get { return textBox1.Text; }
        set { textBox1.Text = value; }
    }
    public Form2()
    {
        InitializeComponent();
    }
}

接下来,在Form1.cs中,在显示对话框之前,首先将textBox1的值赋给Form2。

    private void button1_Click(object sender, EventArgs e)
    {
        this.Hide();
        Form2 f2 = new Form2();
        //assign the value first before showing the dialog
        f2.TextBox1 = textBox1.Text;
        f2.ShowDialog();
        this.Close();
    }

ShowDialog()显示的是Form2的模态窗口这意味着你不能返回到父窗体Form1

f2.textBox1.Text = textBox1.Text;           
this.Close();

上面两行写在f2.ShowDialog();之后,只有当Form2关闭时才会执行。因此,您不会在Form2中获得TextBox中的任何文本。

接下来是将Form1TextBox值发送给Form2的部分,最短和最简单的方法是将Form1TextBox值作为字符串传递给Form2的构造函数。

下面是

点击Form1按钮:

private void button1_Click(object sender, EventArgs e)
{
    this.Hide();
    Form2 f2 = new Form2(textBox1.Text);
    f2.ShowDialog();           
} 

Form 2构造函数:

public Form2(string Text)
{
    InitializeComponent();
    textBox1.Text = Text;
}

问题在这里:

f2.ShowDialog();

方法ShowDialog()是阻塞调用。在此之后的代码将不会被执行,直到关闭f2。试着用Show()替换。

编辑:正如@Abhishek指出的那样,使用Show()并不能解决问题,因为你想在第二个表单完成后关闭第一个表单。问题仍然是一样的,虽然,ShowDialog()将在那里等待一个对话sult,因此不会执行下一个语句。考虑在显示表单之前设置文本框的内容。