c# winforms / UserControls -如何从UserControl1触发事件到UserControl2
本文关键字:UserControl1 事件 UserControl2 winforms UserControls | 更新日期: 2023-09-27 18:13:35
我试图从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
}
}
}
UserControl1
需要有对UserControl2
的引用。一旦你有了一个引用,UserControl1
应该调用UserControl2
上的一个方法,导致事件被引发。
根据应用程序的结构,可以通过构造函数、子函数或属性将对UserContro2
的引用传递给UserControl1
。您应该将引用存储在UserControl1
的私有字段中,以便您可以从DoubleClick
事件处理程序访问它。
也可以用其他方式设置。你可以让UserControl2
成为父窗体上的一个属性,然后UserControl1可以将它的.Parent
属性转换为正确的类型,并使用该属性作为引用。
您还可以设置第三类作为singleton
,它引用UserControl2
。
所有这些解决方案的共同点是,UserControl1
需要以某种方式引用UserControl2
,以便能够对其进行任何操作。
您可以通过让UserControl1
引发它的父窗体侦听的事件来避免引用问题。由于父窗体应该已经有对其上所有控件的引用,您可以使窗体代理为您调用UserControl2
。