【问题标题】:C# user controlsC# 用户控件
【发布时间】:2013-09-07 22:32:37
【问题描述】:

如何在父控件中添加控件 我正在使用 C# windows 应用程序

我有一个用户控件,包括组框和复选框组框,控件根据复选框的选中属性启用或禁用 现在在其他应用程序中使用此控件时 如何在组框中添加控件? 这样他们就可以在我的应用程序中启用或禁用

【问题讨论】:

  • 你能发布一些你目前拥有的样本吗?
  • 好的,这是我在用户控件中的代码,我有一个组框和一个复选框,然后我在 this.groupbox1.controls { if(ctrl!=this.checkbox1) 中为每个控件 ctrl 编写了以下代码{ ctrl.enabled=this.checkbox1.checked;这是我的控件现在我想在其他应用程序中使用这个控件我想知道如何将控件(面板、组框)添加到这个已经制作的控件
  • 如果您想简单地向用户控件本身添加其他控件,请创建一个公共方法(类似于我的答案的编辑部分中的那个),将控件添加到用户控件(例如: this.Controls.Add) 而不是容器。然而,要意识到,如果没有某种代码利用它们的属性,添加的控件将很难使用,并且反过来使其作为调用代码的属性或方法可用。
  • 这是用户控件和修改默认设计器行为的一个有趣功能;我不知道它可以做到。一如既往地感谢汉斯提供的好信息。 (虽然我仍然不确定它是否适用于这个问题。)

标签: c# winforms user-controls


【解决方案1】:

您想通过代码(以编程方式)还是使用设计器添加控件?

如果要将控件添加到组框、面板或其他容器中,请先创建控件:

Label myLabel = new Label();
myLabel.Name = "Name";
myLabel.Text = "Example";
myLabel.Location = new Point(10, 10);

然后,使用容器的 Controls 属性,通过 add 方法将其添加到容器中:

myGroupBox.Controls.Add(myLabel);

最后,您可以使用复选框的状态来启用/禁用整个容器(及其所有子控件)。您可能想在某处使用布尔值,但这是基本思想:

在复选框的 CheckChanged 事件中,执行以下操作:

myGroupBox.Enabled = myCheckBox.Checked;

或相反,这取决于您希望启用状态的方式。

编辑:

从您的评论看来,您想在设计时向现有用户控件添加其他控件。您需要在公共方法中提供该功能。

public void AddControl(Control controlToAdd)
{
    myGroupBox.Controls.Add(controlToAdd);
}

基本上将用户控件容器的Controls.Add 暴露给与您的用户控件交互的代码。

我希望这会有所帮助。

编辑 2:

这是您在评论中发布的代码:

foreach(Control ctrl in this.groupbox1.Controls)
{
    if (ctrl != this.checkbox1)
    {
        ctrl.Enabled = this.checkbox1.Checked;
    }
}

这会遍历所有控件,并根据 checkbox1 的选中状态启用或禁用除 checkbox1 之外的所有控件。

首先,如果 checkbox1 不是 groupbox1 中的子控件,则不需要 if 语句来确保当前控件 不是 checkbox1。永远不会,因为 foreach 只是迭代 groupbox1 的子控件。只要 checkbox1 在 groupbox1 之外,就会从迭代中省略。

其次,如果您简单地启用或禁用整个分组框,维护起来会更快、更容易。其中的所有控件都将继承启用/禁用状态。使用您的控件名称,代码将是:

groupbox1.Enabled = checkbox1.Checked;

希望我能正确理解您的问题。

【讨论】:

  • 感谢您的回复,我知道如何添加控件,实际上我已经制作了一个用户控件,它有一个组框和一个复选框,现在我想在我的应用程序中使用这个用户控件,我想添加我的用户控件中的控件真的有可能吗??
  • 听起来您想在设计时间之后向用户控件添加控件,即以编程方式。您需要在用户控件中提供一种机制,允许您向其中添加其他控件。我将用一个例子来编辑我的答案。
  • 是的,你做对了,你能告诉我该怎么做吗?我是一个新程序员,我应该怎么做??
【解决方案2】:

我最终制作了一个用户控件,其中我在复选框内添加了一个组框。 所以分组框是根据复选框来启用和禁用的。

【讨论】:

    猜你喜欢
    • 2012-04-23
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多