我正在使用winforms。我有2个表单,每个表单中包含TextBox
和Button
。我的目标是通过点击按钮将TextBox
form1
上的内容发送到form2
上的文本框。我还想关闭form1并仅显示form2
与form1
上TextBox中输入的内容。
这是我到目前为止所拥有的。我的代码存在的问题是内容未在form2
中显示。
this.Hide();
Form2 f2 = new Form2();
f2.ShowDialog();
f2.textBox1.Text = textBox1.Text;
this.Close();
//close form1
答案 0 :(得分:0)
鉴于您提供的代码来自您的按钮点击事件。它可以简单地修改如下,以获得你需要的东西。
Form2 f2 = new Form2();
f2.textBox1.Text = textBox1.Text;
f2.Show();
this.Close();
但是,如果Form1是主窗体,即它是从Program.cs加载的。您的申请将在this.Close()
我还建议你不要制作Form2的textBox1。保留属性private
并创建一个函数来修改其值,例如:在Form2中创建此函数
public void SetTextBox1Text(string text)
{
textBox1.Text = text;
}
您的Form1按钮点击事件:
Form2 f2 = new Form2();
f2.SetTextBox1Text(textBox1.Text);
f2.Show();
this.Close();
答案 1 :(得分:0)
首先在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();
}
答案 2 :(得分:0)
ShowDialog()
会显示Form2
的模态窗口,这意味着您无法转到Form1
f2.textBox1.Text = textBox1.Text;
this.Close();
以上两行是在f2.ShowDialog();
之后写的,只有当Form2
关闭时才会执行。因此,您未在TextBox
中的Form2
中收到任何文字。
来到您将Form1
TextBox
值发送到Form2
的部分,最简单最简单的方法是通过Form1
TextBox
value作为Form2
的构造函数的字符串。
以下是代码
Form1按钮单击:
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
Form2 f2 = new Form2(textBox1.Text);
f2.ShowDialog();
}
表单2构造函数:
public Form2(string Text)
{
InitializeComponent();
textBox1.Text = Text;
}
希望这有帮助。
答案 3 :(得分:-1)
问题在于:
f2.ShowDialog();
方法ShowDialog()
是阻止调用。在f2
关闭之前,您之后的代码将无法执行。尝试将其替换为Show()
。
编辑:正如@Abhishek所指出的那样,使用Show()
并不能解决问题,因为你想在第二个表格完成后关闭第一个表格。问题仍然是相同的,ShowDialog()
将在那里等待DialogResult,因此不会执行下一个语句。在显示表单之前,请考虑设置文本框内容。