我正在尝试从UserControl1触发位于UserControl2中的Button1_Click事件。
从我的主窗体
动态加载控件//UserControl2
public partial class ItemsModule : UserControl
{
private void ButtonRefreshProperties_Click(Object sender, EventArgs e)
{
RefreshControls();
}
public void RefreshControls()
{
SomeCode();
}
}
/// MainForm this is how i add the Control from the Main Form
ItemsModule im = new ItemsModule();
im.Name = "ItemsModule";
flpModules.Controls.Add(im);
//UserControl1
public partial class TreeViewControl : UserControl
{
private void ItemTreeView_MouseDoubleClick(Object sender, MouseEventArgs e)
{
String ItemId = ItemTreeView.SelectedNode.Name;
Variables.CurrentItemID = ItemId;
if (LoadedModules.Items)
{
//Here I would like a way to trigger ItemsModule.ButtonRefreshProperties_Click
}
}
}
答案 0 :(得分:2)
UserControl1
需要引用UserControl2
。获得引用后UserControl1
应调用UserControl2
上导致事件被引发的方法。
您可以通过构造函数,子属性或属性将UserContro2
的引用传递给UserControl1
,具体取决于应用程序的结构。您应该将引用存储在UserControl1
的私有字段中,以便您可以从DoubleClick
事件处理程序访问它。
也可以通过其他方式进行设置。您可以将UserControl2
设置为父窗体上的属性,然后UserControl1可以将其.Parent
属性强制转换为正确的类型,并将该属性用作参考。
您还可以将第3课设为singleton
,并引用UserControl2
。
所有这些解决方案的共同之处在于,某种方式UserControl1
需要引用UserControl2
才能对其执行任何操作。
通过让UserControl1
引发父窗体侦听的事件,可以避免引用问题。由于父表单应该已经引用了它上面的所有控件,因此您可以让表单代理调用UserControl2
中的调用。