【问题标题】:C# - How to allow one user control to change the label in other user control within a windows form?C# - 如何允许一个用户控件在 Windows 窗体中更改其他用户控件中的标签?
【发布时间】:2013-01-28 00:01:53
【问题描述】:

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

然后我有这样的用户界面: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。也许任何人都可以向我推荐一个熟悉的好网站?

【问题讨论】:

    标签: c# winforms user-controls


    【解决方案1】:

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

    这样做应该是安全的。

    【讨论】:

    • 嗨@xpda,也许我不太清楚“从...按钮单击处理程序调用该方法”。你介意我要求进一步解释吗?对不起,我是初学者。
    • 没问题。 “按钮单击处理程序”是指处理按钮单击的函数。例如,CreateUCBbtn_Click 处理 CreateUCBbtn 按钮的单击事件。
    • 好的!有用!我现在完全明白它是如何工作的了。非常感谢@xpda! ^_^
    【解决方案2】:

    为了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);
    }
    

    【讨论】:

    • 我想我已经明白了这里想要告诉我的内容。谢谢@ebeeb
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 2015-01-21
    相关资源
    最近更新 更多