C# 如何访问流布局面板中自定义用户控件中的控件?

C# 如何访问流布局面板中自定义用户控件中的控件?,c#,.net,user-controls,flowpanel,C#,.net,User Controls,Flowpanel,我在c#forms应用程序中创建了一个自定义用户控件,其中包含一个groupbox、一个复选框和一个按钮 在我的主应用程序中,我可以将这些控件添加到流布局面板并设置它们的初始值 问题是,在项目已经在“流布局”面板中之后,如何访问按钮事件和复选框 private void btnAdd_Click(object sender, EventArgs e) { AttributeListItem.AttributeListItem at = new AttributeListItem.Attr

我在c#forms应用程序中创建了一个自定义用户控件,其中包含一个groupbox、一个复选框和一个按钮

在我的主应用程序中,我可以将这些控件添加到流布局面板并设置它们的初始值

问题是,在项目已经在“流布局”面板中之后,如何访问按钮事件和复选框

private void btnAdd_Click(object sender, EventArgs e)
{
    AttributeListItem.AttributeListItem at = new AttributeListItem.AttributeListItem();
    at.groupbox.Text = lbxLDAPFields.GetItemText(lbxLDAPFields.SelectedItem);
    flPanel.Controls.Add(at);
    // button name is btnEdit
}

使用事件和公共属性,因为这听起来像是在设计器中添加每个项目,所以您可以连接EventHandler并访问usercontrol中的属性,为其指定名称,以便稍后找到它。这是一个非常粗略的例子,看看它是否适合你

用户控制

public partial class MyCustomUserControl : UserControl
{
    public event EventHandler<EventArgs> MyCustomClickEvent;
    public MyCustomUserControl()
    {
        InitializeComponent();
    }
    public bool CheckBoxValue
    {
        get { return checkBox1.Checked;}
        set { checkBox1.Checked = value; }
    }
    public string SetCaption
    {
        get { return groupBox1.Text;}
        set { groupBox1.Text = value;}
    }

    private void button1_Click(object sender, EventArgs e)
    {
        MyCustomClickEvent(this, e);

    }
}

肮脏而简单的解决方案:将
UserControl
控件公开

然后你可以做类似的事情

userControl1.button1.PerformClick();

顺便说一句,在您的示例中,您已经在访问
groupbox
,所以看起来您知道这一点。是否以编程方式创建控件(可能在用户控件构造函数中)?然后,您可以将
FlowLayoutPanel
设置为公共,并使用其
控件
集合来查找所需的控件,或者您可以将控件实例保留在
用户控件
的公共字段/属性中。我正在将这些添加到流布局面板中。我没有注意到组件上的公共功能;我在代码中超越了组件本身。那就容易多了;谢谢你指出这一点。据我所知,每个自定义控件都有一个唯一的事件?我是否让所有这些事件都指向调用页面中的一个处理程序并检查单击了哪个按钮?我不太清楚这是怎么处理的。。。谢谢哦,等等,马克·霍尔的例子说明了这一点。让我来处理一下!。。。兴奋的。谢谢我刚刚更改了代码,注意到我忘了将控件的查找结果包含在eventhandler中。@ScottJohnson不客气,很高兴我能提供帮助。
userControl1.button1.PerformClick();