我在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
}
答案 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
控件公开
然后你可以做类似
的事情userControl1.button1.PerformClick();
P.S。:顺便说一下,您已经在示例中访问了groupbox
,所以看起来您已经知道了。您是否以编程方式创建控件(可能在用户控件构造函数中)?然后,您可以公开FlowLayoutPanel
并使用其Control
集合来查找所需的控件,或者您可以将控件实例保存在UserControl
的公共字段/属性中。