c#中从一种形式到另一种形式的文本
本文关键字:另一种 文本 一种 | 更新日期: 2023-09-27 18:14:53
我使用的是winforms。我有两种形式,每种形式都包含一个TextBox
和一个Button
。我的目标是从form1
上的TextBox
到form2
上的文本框的内容单击一个按钮。我还想关闭form1,只显示form2
与在form1
上的文本框中键入的内容。
这是我目前所知道的。我的代码的问题是内容不显示在form2
。
this.Hide();
Form2 f2 = new Form2();
f2.ShowDialog();
f2.textBox1.Text = textBox1.Text;
this.Close();
//close form1
假设您提供的代码来自您的按钮单击事件。它可以被简单地修改如下以得到你需要的。
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
中的任何文本。
接下来是将Form1
的TextBox
值发送给Form2
的部分,最短和最简单的方法是将Form1
的TextBox
值作为字符串传递给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,因此不会执行下一个语句。考虑在显示表单之前设置文本框的内容。