C# 返回包含控制器类控件的groupbox并修改单个控件
假设我在winform中嵌入了一个单独的groupBox 我们可以称之为grpLocal 因此,在这一点上,grpBox不包含任何单独的控件 现在让我们假设我需要这个grpLocal groupbox根据上下文包含不同的控件,在本例中是不同的产品 我的想法是创建一个抽象基类,其中包含如下方法:C# 返回包含控制器类控件的groupbox并修改单个控件,c#,winforms,C#,Winforms,假设我在winform中嵌入了一个单独的groupBox 我们可以称之为grpLocal 因此,在这一点上,grpBox不包含任何单独的控件 现在让我们假设我需要这个grpLocal groupbox根据上下文包含不同的控件,在本例中是不同的产品 我的想法是创建一个抽象基类,其中包含如下方法: public abstract GroupBox showContextControls() public override Groupbox showContextControls() { pri
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;
}
Control[] matches = grpLocal.Controls.Find("label2", true);
if (matches.Length > 0 && matches[0] is Label)
{
Label lbl = (Label)matches[0];
lbl.Text = "Hello World!";
}
后面是一些派生子类(每个产品一个),它们将使用此类执行以下操作:
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;
}
Control[] matches = grpLocal.Controls.Find("label2", true);
if (matches.Length > 0 && matches[0] is Label)
{
Label lbl = (Label)matches[0];
lbl.Text = "Hello World!";
}
请记住,此示例仅用于说明,因为需要返回大量控件。
grpLocal groupbox将执行以下操作
grpLocal = controller.showContextControls();
所以。。。关于这个问题
然后,我可以使用动态生成的“label2”或“label”并从原始winform中修改它们的属性吗
我可以想象你可以使用这个类(这是基于我自己的研究),但我似乎无法理解它在这种情况下是如何工作的
我希望能够执行以下操作来修改标签属性:
grpLocal.label2.text = "this is label 2";
非常感谢您的帮助,如果我没有说清楚,请在评论中提及 创建标签时,为标签指定一个名称:
Label label2 = new System.Windows.Forms.Label();
label2.Name = "label2";
如果标签由GroupBox直接包含,则可以使用:
grpLocal.Controls["label2"].Text = "Hi!";
如果标签可以嵌套在其他控件中,如GroupBox中的面板,则可以使用controls.Find()来搜索它,如下所示:
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;
}
Control[] matches = grpLocal.Controls.Find("label2", true);
if (matches.Length > 0 && matches[0] is Label)
{
Label lbl = (Label)matches[0];
lbl.Text = "Hello World!";
}
不知道我是否理解你的问题。但有一点可能会有所帮助:您可以使用搜索特定控件的递归方法遍历WinForms窗体上的所有控件。您可以使用每个控件的Tag属性来标识它,方法是在创建控件时将标记设置为某个依赖于使用情况的值或引用。当然可以。创建控件时,请为控件指定一个新的名称。然后您只能使用@RenniePet搜索GroupBox。我的问题是控件是从另一个控制器类动态生成的。控件作为groupbox容器从该类返回,一旦发生这种情况,我需要向它们添加属性。idle_mind的解决方案是目前为止最接近我需要做的。哇,这太棒了。是否可以对输入控件执行相同的操作?已找到解决方案!