C# - 如何允许一个用户控件在Windows窗体中更改其他用户控件中的标签?

时间:2013-01-27 15:48:07

标签: c# winforms user-controls

我有一个名为 MainForm.cs 的窗体和两个用户控件,分别是 UserControlRed.cs UserControlBlue.cs 。创建一个UserControlRed的对象 ucr ,并使用MainForm的默认构造函数中的panel1.Controls.Add(ucr);将其添加到MainForm的panel1中。

然后我有这样的用户界面:MainForm

enter image description here

注意:使用UserControlRed中的单击按钮事件创建ucb的UserControlBlue实例。代码如下:

private void CreateUCBbtn_Click(object sender, EventArgs e)
{
     MainForm f1 = new MainForm();
     f1 = (MainForm)this.Parent.Parent;
     f1.AddUCBlueIntoPanel2();
}

现在,我想要做的是在用户点击“更改UCB标签”按钮后,UserControlBlue中的标签将相应更改为UserControlRed中文本框中输入的内容。所以,我在这里有两个问题:

  1. 关于上面的注意,这样做是否安全?
  2. 将UserControlRed中文本框中的值传递给UserControlBlue中的标签的最佳方法是什么?
  3. 另一个注意事项:我仍然是OOP的新手,特别是C#和winforms。也许有人可以建议我一个熟悉的好网站?

2 个答案:

答案 0 :(得分:2)

您可以在UserControlBlue中添加一个公共方法(函数),该方法接受字符串作为参数并将其分配给标签的文本。然后,您可以从“更改UCB标签”按钮单击处理程序中调用该方法。

这样做应该是安全的。

答案 1 :(得分:0)

为了single responsibility principle,这就是臭臭的代码。两者的父母应该知道如何填充其面板的逻辑。红色和蓝色面板应该只知道如何在其父级上触发某些操作,但实际的实现存储在父级的逻辑中。

就像现在一样,红色面板实现的逻辑不依赖于红色面板本身。

private void CreateUCBbtn_Click(object sender, EventArgs e)
{
     var textBoxContent = this.MyTextBox.Text;
     var parent = this.Parent as MainForm;
     parent.AddBlueIntoPanel2(textBoxContent);
}
相关问题