簡體   English   中英

在 C# 中從 Form2 更改 Form1 的 TextBox 文本

[英]Changing TextBox Text of Form1 From Form2 in C#

我是 C# 編程的新手。 我有一個初學者級別的問題:如何使用 form1 中的按鈕更改 form 2 對象中 textbox1 的文本屬性?

這是我在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();
        }
    }
}

這是在form2中:

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

        }
    }
}

當您使用控件工具箱將文本框或任何與此相關的控件添加到 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" 來設置值。

每次單擊按鈕時,代碼都會創建新的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();
        }
    }
}
 //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();
         }
    }
 //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();
        }


     }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM