从控制器类返回包含控件的分组框,并修改单个控件

本文关键字:控件 单个 修改 控制器 返回 包含 | 更新日期: 2023-09-27 18:34:35

假设我在winform中嵌入了一个单独的groupBox。

我们可以称之为grpLocal

所以在这一点上,这个grpBox不包含任何单独的控件。

现在假设我需要这个 grpLocal 分组框包含基于上下文的不同控件,在这种情况下不同的产品。

我的想法是创建一个抽象的基类,其中包含这样的方法:

public abstract GroupBox showContextControls()

后跟许多派生子类(每个产品一个(,它们将使用此类执行以下操作:

public override Groupbox showContextControls()
{
  private label = new System.Windows.Forms.Label();
  private label2 = new System.Windows.Forms.Label();
  private grpExternal = new System.Windows.Forms.GroupBox();
  this.grpExternal.Controls.Add(this.label );
  this.grpExternal.Controls.Add(this.label2 );
  return grpExternal;
}

请记住,此示例仅用于说明,因为有大量控件要返回。

grpLocal groupbox 然后会做这样的事情...

grpLocal = controller.showContextControls();

所以。。。关于问题。

然后,我可以获取动态生成的"label2"或"label"并从原始winform中修改它们的属性吗?

我会想象你可以使用 Control.ControlCollection 类(这是基于我自己研究的内容(,但我似乎无法弄清楚它在这种情况下是如何工作的。

我希望能够做这样的事情来修改标签属性:

grpLocal.label2.text = "this is label 2";

非常感谢任何帮助,如果我没有说得足够清楚,请在评论中提及。

从控制器类返回包含控件的分组框,并修改单个控件

在创建标签时为其指定名称

        Label label2 = new System.Windows.Forms.Label();
        label2.Name = "label2";

如果标签直接包含在分组框中,则可以使用:

        grpLocal.Controls["label2"].Text = "Hi!";

如果标签可以嵌套在其他控件中,例如 GroupBox 中的面板,则可以使用 Controls.Find(( 进行搜索,如下所示:

        Control[] matches = grpLocal.Controls.Find("label2", true);
        if (matches.Length > 0 && matches[0] is Label)
        {
            Label lbl = (Label)matches[0];
            lbl.Text = "Hello World!";
        }