我有一个WinForm应用程序,在主窗体上有许多控件,如标签、文本框等。
如果我有另一个类,在同一个程序集中,我该如何访问这些控件?
例如,从我的新类中,我想要更新Form1中的一个标签?
我有一个WinForm应用程序,在主窗体上有许多控件,如标签、文本框等。
如果我有另一个类,在同一个程序集中,我该如何访问这些控件?
例如,从我的新类中,我想要更新Form1中的一个标签?
Form1 f = new Form1()
f.lblMyLabel.Text = "My Text"
一种方法是在Form1类中创建公共属性,以便公开要修改的控件。
例如,如果您的标签在设计时称为label1,则可以这样做:
public Label MyForm1Label { get { return label1; } }
选择您想要从另一个类/表单中访问的控件。转到其属性并将其修饰符值设置为“internal”(如果您只想在同一程序集中使用它)。
现在,无论在同一程序集中的哪个位置使用它,只需创建该表单的对象即可,例如:
myForm objform = new myForm();
objform.txtName.Text="any text";
然后,您可以使用objform.show();或objform.showdialog();来显示该表单。
但我认为这不会解决您的问题,因为我感觉您的表单已经显示在屏幕上,而您希望从另一个表单/类更改其标签/文本框的值。 因此,您需要获取当前表单的对象,否则它将不会显示在当前正在显示的表单上。
因此,我认为单例模式将为您提供完美的解决方案。只需创建一个类,在该类中创建该表单的静态对象,然后创建一个静态函数并检查对象是否已初始化,如果已初始化,则不要初始化它并使用现有对象,否则初始化它。
还有许多其他解决方案,例如通过创建公共属性,但您必须使用当前正在显示的表单的同一对象的引用才能看到更改反映在当前正在显示的表单中。
public void SetSomething(int value)
{
Control1.value = value;
Control2.value = value;
...
}
最简单的方法是使用:
Form1 f = new Form1() f.lblMyLabel.Text = "我的文本"
因此,您必须将Form1标签"lblMyLabel"设置为public。我已经用richTextBox完成了它。