.NET - 在表单上获取控件引用的正确方法

时间:2009-10-06 13:19:49

标签: c# forms controls

我有一个C#类库,它使用一个表单(也在库中)。假设我在此表单上有一个名为 editContents 的编辑框。在常规表单应用程序中,我习惯于能够像这样获取编辑框:

class MainForm
{
     void Method()
     {
          this.editContents.Text = "Hi";
     }
}

我想在常规表单应用程序的幕后发生了一些魔法,因为编辑框成员在MainForm类中是私有的,但我仍然可以像公共成员一样访问它。

但在我的类库中,我无法像这样访问编辑框。我实例化并显示“手动”形式:

form = new MyForm();
form.Show();

如何正确从此表单中获取 editContents 控件?

7 个答案:

答案 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)

我会在库中引入一个事件,当文本发生更改并应在表单中设置时,该事件会通知所有订阅者此事件。表单应附加到此事件并自行设置文本框内容。