如何从另一个usercontrol更改usercontrol的标签颜色?C#.NET框架

如何从另一个usercontrol更改usercontrol的标签颜色?C#.NET框架,c#,.net,winforms,user-controls,C#,.net,Winforms,User Controls,我有3个usercontrols和1个form的项目,当按下按钮时,usercontrols显示在表单上。现在我需要通过单击位于“UserControl1”中的按钮来更改“UserControl3”上的标签颜色,我尝试了以下代码,但没有成功 var name = new UserControl3(); name.label.ForeColor = Color.Green; 我还尝试了另一种方法,但它抛出了一个异常,如下图所示 然后,我找到了另一种几乎可以按预期工作的方法,即删除并添加user

我有3个usercontrols和1个form的项目,当按下按钮时,usercontrols显示在表单上。现在我需要通过单击位于“UserControl1”中的按钮来更改“UserControl3”上的标签颜色,我尝试了以下代码,但没有成功

var name = new UserControl3();
name.label.ForeColor = Color.Green;
我还尝试了另一种方法,但它抛出了一个异常,如下图所示

然后,我找到了另一种几乎可以按预期工作的方法,即删除并添加usercontrol。问题是,然后它进入了应该是空的主窗体

var name = new UserControl3();
this.Controls.Remove(name);
this.Controls.Add(name);
name.label1.ForeColor = Color.Green;

上面的代码几乎可以像我想的那样工作,但我不认为这是一个好的解决方案,而且我很确定还有其他更简单的方法可以让它工作。。。感谢您的任何帮助。谢谢

您不必重新创建usercontrol的实例,只需使用创建的第一个实例并更改控件的颜色即可

仅此代码:

name.label.ForeColor = Color.Green;
全局定义此代码

var name = new UserControl3();

当然,您不能这样做:
var name=newusercontrol3()。您创建的UC新实例与
UserControl3
的任何现有实例都不相关这些用户控件之间的关系是什么?一个人怎么知道另一个人的存在?它没有(也不应该)。您需要另一个负责在这些部分之间创建关系的对象。称之为控制器。您还可以使您的UCs引发事件,并公开允许与其内部组件交互的公共方法和/或属性。例如,当单击UC1中的按钮时,UC1引发事件(公共)。您可以让表单订阅此事件(或使用控制器类)。引发事件时,窗体(或控制器)调用UC3的公共方法,该方法允许设置其内部组件之一的颜色。在这种情况下,即使更换了更改颜色的控件,外部代码也保持不变——永远不要将UC的子控件的访问修饰符更改为
public
。我理解错在哪里,阅读您的答案一切都很清楚,但现在我不知道如何创建此“控制器”将usercontrols置于关系中。我知道我必须创建一个名为controllerb的类,在查找它之前(,),使用表单类订阅UC1的公共事件,并使用此事件调用UC3的公共方法。您必须同时进行这两项操作,因此要了解如何引发自定义事件以及如何公开公共方法。-然后,看看这些模式。你会发现它很有用(是的,它们都有自己的学习曲线)。还要注意,你必须知道OOP的基本原理,否则你将很难制作一个功能齐全的应用程序。