【问题标题】:Append text in textbox on another form?在另一个表单的文本框中附加文本?
【发布时间】:2012-04-30 01:50:01
【问题描述】:

我有 2 个表格。在Form2 上,我有一个文本框和一个按钮。当我按下按钮时,我希望它将文本框中的文本附加到Form1 上的文本框中。这是我的代码:

Form2:

private void button1_Click(object sender, EventArgs e)
{
    frm1.AppendTxt(textBox1.Text);
    this.Close();
}

开启Form1

public void AppendTxt(string text)
{
    this.body.AppendText(text);
    MessageBox.Show(body.Text);
}

由于某种原因,Form1 的文本框中没有显示该文本。但是,弹出的消息框显示的是我在Form2上输入的文字。

【问题讨论】:

    标签: c# winforms button textbox


    【解决方案1】:

    试试body.Text += " " + text;

    【讨论】:

    • var frm = Application.OpenForms["Form1"] ??新表格1(); frm.body.Text += " " + text;
    • @rcarter: frm 将有错误的静态类型,成员 body 的查找将失败。
    【解决方案2】:

    您很可能正在更改 Form1 的隐藏副本中的文本框,而不是屏幕上显示的实例。

    尝试将Form1 句柄传递给Form2 的构造函数,并将其保存在类成员变量(也称为field)中以在事件处理程序中使用。

    【讨论】:

      【解决方案3】:

      在表单之间传递值。

      你可以试试这个。首先,您可以声明一个所有表单都可以访问的变量 喜欢这个,

      string yourValue;
      

      PS:声明你的班级

      您可以从 form1 向该类传递一个值。 像这样,

      YourClass.yourValue = textbox1.text;
      

      曾经有一个价值。将其传递给您的第二种形式。

      textbox2.text = YourClass.yourValue;
      

      希望对您有所帮助。 :D

      【讨论】:

      • 这看起来像 jQuery?这个问题被标记为c#,而不是javascript。根据事件处理程序签名和 MessageBox 的使用,可以肯定它是 WinForms,而不是 ASP。
      【解决方案4】:

      你有两种形式:form1 和 form2。两种形式正在开放。在 form2 中,您有一个文本框(txt2)和一个按钮(btn2)。在 form1 中,您有一个文本框(txt1)。当用户在 txt2 上输入内容并单击 btn2 时,txt2 中的文本将附加到 txt1。这就是你想要的?

      如果是: 在 form2 中,您应该创建一个委托:

      // Declare a delegate
      public delegate void GetValue(string value);
      // Declare event with delegate
      public event GetValue btn2_Clicked;
      

      然后,在 form2 中,您创建一个函数来处理该事件:函数名称与您刚刚声明的事件名称相同,并在其中添加前缀“On”。像这样:

      public void Onbtn2_Clicked(string value)
      {
          if (btn2_Clicked != null)
          {
              btn2_Clicked(value);
          }
      }
      

      之后,在 btn2 点击事件中,提升你刚刚创建的事件:

      private void btn2_Click(object sender, EventArgs e)
      {
          Onbtn2_Clicked(txt2.Text);
      }
      

      好的,这是在form2中完成的。复出form1完成: 我假设当用户单击 form1 中的按钮(btn1)时打开了 form2,所以在 btn1 点击事件中:

      private void btn1_Click(object sender, EventArgs e)
      {
          // Create form2
          Form2 frm2 = new Form2();
          // Handle btn2 click
          frm2.btn2_Clicked += new Form2.GetValue(frm2_btn2_Clicked);
          // Show form2
          frm2.Show();
      
      }
      
      void frm2_btn2_Clicked(string value)
      {
          // When btn2 is clicked, the text in txt2 will be assign to txt1
          txt1.Text = value;                
      }
      

      文本会在form1中赋值给txt1

      【讨论】:

        【解决方案5】:

        我认为您必须为您的文本框创建 getter 和 setter,以便将其作为表单类的一部分公开,您可以将其作为表单对象访问 第一种形式

           public string sometext
            {
                get { return sometext.Text; }
                set { sometext.Text = value; }
            }
        

        第二种形式

        Form1 form= new Form1();
         form.sometext = "some name";
        

        这是我找到的另一个简短的解决方案 在 Form1 中启动 form 2

        Form2 form2 = new Form2();
        form2.Owner = (Form)this;
        form2.Show();
        

        在Form2的

        this.Owner.Controls.Find("TextBox1",true).First().Text="Hi!!!!"
        

        【讨论】:

        • 除了文本框和属性之间的命名冲突之外,这无助于访问已经存在的Form1实例,它会创建一个新的(隐藏的)实例。
        【解决方案6】:

        将Form2.designer.cs中的txtBox从private改为public怎么样?

        private System.Windows.Forms.TextBox textBox1;
        

        public System.Windows.Forms.TextBox textBox1;
        

        这样你就可以在Form2中这样发送:

        Form1 frm1 = new Form1();
        
        private void button1_Click (object sender, EventArgs e)
        frm1.textBox1.AppendText(textBox2);
        

        textBox2 是您在 Form2 中输入文本的地方

        【讨论】:

          猜你喜欢
          • 2023-03-09
          • 2014-07-07
          • 1970-01-01
          • 2018-02-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-24
          • 1970-01-01
          相关资源
          最近更新 更多