1

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

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

在此处输入图像描述

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

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 中的标签的最佳方法是什么?

另一个注意事项:我还是 OOP 的新手,尤其是 C# 和 winforms。也许任何人都可以向我推荐一个熟悉的好网站?

4

2 回答 2

2

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

这样做应该是安全的。

于 2013-01-27T15:57:03.917 回答
0

为了单一责任原则,这将是臭代码。两者的父级都应该知道如何填充其面板的逻辑。红色和蓝色面板应该只知道如何在其父级上触发某些动作,但实际的实现存储在父级的逻辑中。

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

private void CreateUCBbtn_Click(object sender, EventArgs e)
{
     var textBoxContent = this.MyTextBox.Text;
     var parent = this.Parent as MainForm;
     parent.AddBlueIntoPanel2(textBoxContent);
}
于 2013-01-27T16:01:53.397 回答