从C#中的Form2更改Form1的TextBox文本

时间:2016-04-23 03:53:53

标签: c# winforms class textbox

我是C#编程的新手。我有一个初级水平的问题: 如何使用form1中的按钮更改表单2对象中textbox1的text属性?

这是我在form1中的代码:

namespace DoubleForms
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            frm2.Show();
        }
    }
}

这是形式2:

namespace DoubleForms
{
    public partial class Form2 : Form
    {


        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form1 frm1 = new Form1();
            frm1.textBox1.Text = "Test";

        }
    }
}

4 个答案:

答案 0 :(得分:1)

当您使用控件工具箱向Winform添加文本框或任何控件时,控件将被添加为私有,因此无法在其创建的类之外访问它。足以修复虽然只是添加了一个公共属性,可以让你获取并设置文本框值

namespace DoubleForms
{
    public partial class Form1 : Form
    {
        // NEW CODE
        public string TextBoxText 
        { 
            get { return this.textBox1.Text; }
            set { this.textBox1.Text = value; }
         }

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            frm2.Show();
        }
    }
}

然后从Form2你可以调用form1.TextBoxText =" blah blah"设置值。

答案 1 :(得分:0)

每次点击按钮时,代码都会创建新的Form1,这不是您想要的。

您需要做的是在Form2中创建一个活动,然后在Form1订阅该活动,这样您就可以收听来自Form2的更改并更新Form1

namespace DoubleForms
{
    public partial class Form2 : Form
    {
        public event EventHandler Updated;  // define an event handler

        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
             if(Updated != null)
             {
                  Updated(sender, new EventArgs()); //Raise a change.
             }
        }
    }
}

现在Form1订阅了Form2个活动。

namespace DoubleForms
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            frm2.Updated += (se,ev)=> textBox1.Text = "Test"; // update textbox
            frm2.Show();
        }
    }
}

答案 2 :(得分:0)

 //this code worked for me
 //in form2 put following code prevent form from opening multiple times  
 public partial class Form2 : Form
     {
         public Form2()
         {
              InitializeComponent();
         }
        private static Form2 Instance;
        public static Form2 GetInstance()
            {
                if (Instance ==null || Instance.IsDisposed)
           {
                Instance = new Form2();
            }
            else
             {
                Instance.BringToFront();
            }
                  return Instance;
         }

  // in form1

  public partial class Form1 : Form
     {
         public Form1()
         {
             InitializeComponent();
         }


         private void Button2_Click(object sender, EventArgs e)
         {
             Form2 form2 = Form2.GetInstance();
             form2.textBox1.Text = textBox1.Text;
            form2.Show();
         }
    }

答案 3 :(得分:0)

 //this code worked for me
 //in form2 put following code prevent form from opening multiple times  
 public partial class Form2 : Form
     {
        public Form2()
        {
         InitializeComponent();
        }
        private static Form2 Instance;
        public static Form2 GetInstance()
            {
                if (Instance ==null || Instance.IsDisposed)
           {
                Instance = new Form2();
            }
             else
            {
                 Instance.BringToFront();
            }
                 return Instance;
         }

  // in form1

  public partial class Form1 : Form
     {
         public Form1()
         {
             InitializeComponent();
         }


         private void Button2_Click(object sender, EventArgs e)
        {
            Form2 form2 = Form2.GetInstance();
            form2.textBox1.Text = textBox1.Text;
            form2.Show();
        }


     }