1

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

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

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

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
}
4

2 回答 2

1

使用事件和公共属性,因为听起来您在设计器中添加每个项目,然后您可以连接您的事件处理程序并访问您的用户控件中的属性,为其分配一个名称,以便您以后可以找到它。这是一个非常粗略的例子,看看它对你有用。

用户控制

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);

    }
}

表格1

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";
        }    
    }
}
于 2014-02-05T06:14:22.713 回答
0

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

在此处输入图像描述

然后你可以做类似的事情

userControl1.button1.PerformClick();

PS:顺便说一句,您已经groupbox在您的示例中访问,所以看起来您知道这一点。您是否以编程方式创建控件(也许在用户控件构造函数中)?然后您可以FlowLayoutPanel公开并使用它的Control集合来查找所需的控件,或者您可以将控件实例保留在UserControl.

于 2014-02-05T08:00:29.707 回答