从控制器类返回包含控件的分组框,并修改单个控件
本文关键字:控件 单个 修改 控制器 返回 包含 | 更新日期: 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!";
}