我想直接访问另一个表单上文本框内的文本,因此我在表单中添加了一个公共变量_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";
}
有没有更好的方法直接链接这两个?
答案 0 :(得分:6)
您可以使用属性来直接从TextBox中读取。这样你根本不需要额外的变量。
public string Text
{
get
{
return richTextBox1.Text;
}
}
如果您还希望能够更改文本,请添加setter。
答案 1 :(得分: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;
}
}
答案 2 :(得分:0)
另一种方法是将 TextBox (或您要访问的任何其他控件)的修饰符属性设置为受保护的内部然后打开第二个表单,所有者是第一个表单。
这样,您可以稍后使用以下内容访问控件及其属性:
((Form1)this.Owner).textBox1.Text = "This is a message from the second form";