将文本框链接到变量?

4
我希望能够直接访问另一个窗体中文本框内的文本,因此我向一个窗体添加了一个公共变量_txt,并添加了以下事件:

private void richTextBox1_TextChanged(object sender, EventArgs e)
{
    _txt = richTextBox1.Text;
}

但是表单是这样加载的:
public FrmTextChild(string text)
{
    InitializeComponent();
    _txt = text;
    richTextBox1.Text = _txt;
    Text = "Untitled.txt";
}

有没有更好的方法直接链接这两个内容?
3个回答

7
您可以使用属性直接从您的文本框中读取。这样,您根本不需要额外的变量。
public string Text
{
  get
  {
    return richTextBox1.Text;
  }
}

如果您想更改文本,还需要添加一个setter。

2

我认为表单不应该相互引用控件:当您更改一个控件的布局时,就必须重写另一个控件的代码。在我看来,将共享值存储在单独的类中,并让两个表单引用那个类,会更好一些。如下所示:

public class DataContainer
{
    public string SomeData{get;set;}
}

public class Form1:Form
{
   private DataContainer _container;
   public Form1(DataContainer container)
   {
      _container=container;
   }

   private void richTextBox1_TextChanged(object sender, EventArgs e) 
   { 
       _container.SomeData = richTextBox1.Text; 
   } 

   private void SpawnForm2()
   {
      var form2=new Form2(_container);
      form2.Show();
}

public class Form2:Form
{
   private DataContainer _container;
   public Form2(DataContainer container)
   {
     _container=container;
   }
}

0

另一种方法是将TextBox(或任何其他要访问的控件)的Modifiers属性设置为Protected Internal,然后打开第二个表单,Owner是第一个表单。

这样,您以后可以使用以下方式访问控件及其属性:

((Form1)this.Owner).textBox1.Text = "This is a message from the second form";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接