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

时间:2014-02-05 04:15:21

标签: c# .net user-controls flowpanel

我在c#表单应用程序中创建了一个自定义用户控件,以包含一个组框,一个复选框和一个按钮。

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

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

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
}

2 个答案:

答案 0 :(得分:1)

使用事件和公共属性,因为听起来您正在添加设计器中的每个项目,然后您可以连接事件处理程序并在您的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);

    }
}

<强> Form1中

public partial class Form1 : Form
{
    int count =1;
    public Form1()
    {
        InitializeComponent();
    }

    private void mcc_MyCustomClickEvent(object sender, EventArgs e)
    {
        ((MyCustomUserControl)sender).CheckBoxValue = !((MyCustomUserControl)sender).CheckBoxValue;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        MyCustomUserControl mcc = new MyCustomUserControl();
        mcc.MyCustomClickEvent+=mcc_MyCustomClickEvent;
        mcc.Name = "mmc" + count.ToString();
        mcc.SetCaption = "Your Text Here";
        flowLayoutPanel1.Controls.Add(mcc);
        count += 1;

    }

    private void button2_Click(object sender, EventArgs e)
    {
        var temp = this.Controls.Find("mmc1", true);
        if (temp.Length != 0)
        {
            var uc = (MyCustomUserControl)temp[0];
            uc.SetCaption = "Found Me";
        }    
    }
}

答案 1 :(得分:0)

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

enter image description here

然后你可以做类似

的事情
userControl1.button1.PerformClick();

P.S。:顺便说一下,您已经在示例中访问了groupbox,所以看起来您已经知道了。您是否以编程方式创建控件(可能在用户控件构造函数中)?然后,您可以公开FlowLayoutPanel并使用其Control集合来查找所需的控件,或者您可以将控件实例保存在UserControl的公共字段/属性中。