C#在另一个类中使用winform控件

我有一个WinForm应用程序。 在主窗体上有许多控件,例如标签,文本框等。

如果我在同一个程序集中有另一个类,我该如何访问这些控件?

例如,从我的新课程,我想更新Form1中的标签?

在标签(或任何控件)的属性中,将“Modifiers”选项设为“Public”

现在,您可以从表单的对象访问标签

Form1 f = new Form1() f.lblMyLabel.Text = "My Text" 

从另一个类/表单中选择要访问的控件。 转到其属性并将其修饰符值设置为“internal”(如果您只想在同一个程序集中使用它)。

现在,在你想要使用它的同一个程序集中,只需创建该表单的对象即可

 myForm objform = new myForm(); objform.txtName.Text="any text"; 

然后你可以使用objform.show()显示该表单; 或objform.showdialog();

但我认为这不会解决你的问题,因为我觉得你的表单已经在屏幕上显示,而你想要更改其标签/文本框的值的另一个表单/类,所以为此你将不得不采取当前forms的对象否则它不会显示当前显示forms的任何变化。

所以我认为单身模式会给你完美的解决方案。 只需创建类,并在该类中创建该表单的静态对象,然后创建一个静态函数,并检查对象是否已初始化,不初始化它,并使用现有,否则初始化它。

还有许多其他解决方案也存在,例如通过创建公共属性,但您必须使用当前显示表单的相同对象的引用来查看更改反映到当前显示的表单

一种方法是在Form1类中创建公共属性,公开您尝试修改的控件

例如,如果您的Label在设计器中名为label1,那么您可以执行以下操作:

 public Label MyForm1Label { get { return label1; } } 

除了已经提到的解决方案之外,您还可以为您的表单创建一些公共方法,以提供所需的function(如果某些更改必须显示在多个控件中,可能会很好 – 您的其他类不必记住要更改哪个)

 public void SetSomething(int value) { Control1.value = value; Control2.value = value; ... } 

最简单的方法是使用:

Form1 f = new Form1()f.lblMyLabel.Text =“My Text”

因此,您必须将Form1标签“lblMyLabel”设置为public。 我用richTextBox完成了它。

在此处输入图像描述