【发布时间】:2011-05-15 01:59:42
【问题描述】:
我正在制作一个程序,允许用户通过单独的表单添加注释,以便他们能够将用该表单编写的文本添加回原始表单。目前我无法将用一种形式的richtextbox 编写的文本移动到主表单中的另一个richtextbox。请帮忙,
谢谢
【问题讨论】:
标签: c# winforms text richtextbox
我正在制作一个程序,允许用户通过单独的表单添加注释,以便他们能够将用该表单编写的文本添加回原始表单。目前我无法将用一种形式的richtextbox 编写的文本移动到主表单中的另一个richtextbox。请帮忙,
谢谢
【问题讨论】:
标签: c# winforms text richtextbox
您的问题很可能是由于 Richtextbox 控件的范围造成的。默认情况下,在 WinForms 中,当您在窗体中创建控件时,它的范围为 Private。这意味着控件将不能直接从另一个表单的代码中访问。有几种方法可以解决这个问题。最简单的方法是在此声明(公共/内部)中将其更改为更广泛的范围,这将允许您按照以下方式做一些事情:
richTextBox1.Text = Form2.richTextBox1.Text;
*这假设您的代码在 Form1 中,而您的第二个表单名为 Form2。显然,这需要相应地改变。
这不是一种好的做法,因为允许程序的任何其他部分编辑此表单中包含的控件可能会带来风险。将信息传递给表单的理想解决方案是通过构造函数、适当范围的方法、适当范围的属性,或者在某些情况下通过事件,具体取决于信息的类型、何时可以修改以及它的用途。
在不了解您的具体案例的太多细节的情况下,我可能会建议使用一种方法,因为这将是最简单的案例。
public void UpdateText(string value) {
richTextBox1.Text = value;
}
这将允许其他窗体和控件调用此方法,进而更新richTextBox 的文本。
我会注意到,这些示例都不应该在生产代码中使用(我没有展示如何处理跨线程问题或数据验证),但我认为从问题的性质来看,您这样做更多是为了学习练习。
【讨论】:
如果您想将值移动到新表单,您可以使用新表单的Constructor:
public Form2(string text)
{
textbox1.Text = text;
}
如果您希望新表单向当前表单返回值,您可以在新表单中使用 Property:
public string Value
{
get
{
return textbox1.Text;
}
}
并在使用中:
using (var instance = new Form2())
{
instance.Show();
returnValue = instance.Value;
}
【讨论】:
我假设您正在从主表单调用新表单。在这种情况下,您可以使用发件人来获取实例,或者在您的表单上,如果另一个表单是另一个孩子,您可以通过 Parent 属性及其孩子引用另一个表单。
【讨论】:
像这样:
richTextBox1.Text = richTextBox2.Text;
如果你想附加文本,那么:
richTextBox1.Text += richTextBox2.Text;
【讨论】: