【问题标题】:Text from 1 form to another form in C#C#中从一种形式到另一种形式的文本
【发布时间】:2015-09-27 04:47:55
【问题描述】:

我正在使用。我有 2 个表格,每个表格都包含一个 TextBox 和一个 Button。我的目标是通过单击按钮将内容从form1 上的TextBox 获取到form2 上的TextBox。我还想关闭 form1 并仅显示 form2 以及在 form1 上的 TextBox 中键入的内容。

这是我目前所拥有的。我的代码的问题是 form2 中没有显示内容。

this.Hide();

Form2 f2 = new Form2();
f2.ShowDialog();

f2.textBox1.Text = textBox1.Text;           

this.Close();
//close form1

【问题讨论】:

标签: winforms c# .net winforms textbox


【解决方案1】:

鉴于您提供的代码来自您的按钮单击事件。可以简单修改如下,得到你需要的。

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();

【讨论】:

    【解决方案2】:

    首先在您的 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();
        }
    

    【讨论】:

      【解决方案3】:

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

      希望这会有所帮助。

      【讨论】:

        【解决方案4】:

        问题出在这里:

        f2.ShowDialog();
        

        方法ShowDialog() 是一个阻塞调用。在此之后的代码在f2 关闭之前不会被执行。尝试将其替换为 Show()

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

        【讨论】:

        • 您在发布答案之前尝试过吗?
        • @Abhishek 我确实对此进行了测试,这很明显,因为ShowDialog() 返回了一个 DialogResult。也许blocking call这个词不是最精确的,但是在f2表单关闭之前,OP的f2.textBox1.Text = textBox1.Text不会被执行。
        • 是的。因此,当您将f2.ShowDialog(); 替换为f2.Show(); 时,根据代码序列发生的情况是设置了TextBox 值,然后在执行this.Close() 时关闭应用程序,这不是所需的输出。
        • 现在当然这是一个问题,但这不是问题所在。 OP想知道为什么文本框没有被填满,我认为我的回答很适合他的问题
        • 您正确地指出了问题。但是,恕我直言,使用Show() 并不能解决问题。这就是我要指出的。 :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-06
        • 2011-03-09
        • 1970-01-01
        • 2015-06-06
        • 1970-01-01
        • 1970-01-01
        • 2015-06-23
        相关资源
        最近更新 更多