我有一个C#类库,它使用一个表单(也在库中)。假设我在此表单上有一个名为 editContents 的编辑框。在常规表单应用程序中,我习惯于能够像这样获取编辑框:
class MainForm
{
void Method()
{
this.editContents.Text = "Hi";
}
}
我想在常规表单应用程序的幕后发生了一些魔法,因为编辑框成员在MainForm类中是私有的,但我仍然可以像公共成员一样访问它。
但在我的类库中,我无法像这样访问编辑框。我实例化并显示“手动”形式:
form = new MyForm();
form.Show();
如何正确从此表单中获取 editContents 控件?
答案 0 :(得分:14)
您可以通过添加以下代码来使其成为可公开访问的Property:
public String EditContents // for just the "Text" field
{
get { return this.editContents.Text; }
set { this.editContents.Text = value; }
}
或者:
public TextBox EditContents // if you want to access all of the TextBox
{
get { return this.editContents; }
set { this.editContents = value; }
}
答案 1 :(得分:5)
“魔力”是在* .Designer.cs文件中为文本框生成一个字段。默认情况下,此字段是私有的。如果要更改其可访问性,请在表单设计器中选择文本框,然后将“修饰符”属性更改为“公共”。
然而,公开披露表单的所有控件可能不是一个好主意。您可以将其包裹在Donut建议的属性中,这样更清洁。
答案 2 :(得分:2)
私人会员可以在宣布课程中访问。这就是你能够从MainForm中访问editContents的原因
私人会员在宣布课程之外无法进入
(这是private
的定义,没有魔法)
您可以将其包装在公共财产中:
public TextBox EditContents
{
get { return this.editContents; }
}
答案 3 :(得分:1)
在第一个实例中,您可以访问editContents
,因为您在表单的范围内。
正如@Donut所说,您可以为您的库的用户公开一个属性来使用该控件。如果要限制访问权限,可以改为编写方法。
e.g。
void SetContentForEditor(string text)
{
editContent.Text = text;
}
然后,您可以拨打SetContentForEditor
来拨打电话
e.g。
myForm.SetContentForEditor("hello world");
答案 4 :(得分:0)
您可以通过Controls集合获取它。
form.Controls.Find("nameOfControl", true);
答案 5 :(得分:0)
访问Method()
函数中的表单成员与上一个代码段中的form
引用的区别在于您的Method()
函数是表单类的成员,因此被允许访问该类的其他私人成员。
答案 6 :(得分:0)
我会在库中引入一个事件,当文本发生更改并应在表单中设置时,该事件会通知所有订阅者此事件。表单应附加到此事件并自行设置文本框内容。