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

c# winforms / UserControls -如何从UserControl1触发事件到UserControl2

UserControl1需要有对UserControl2的引用。一旦你有了一个引用,UserControl1应该调用UserControl2上的一个方法,导致事件被引发。

根据应用程序的结构,可以通过构造函数、子函数或属性将对UserContro2的引用传递给UserControl1。您应该将引用存储在UserControl1的私有字段中,以便您可以从DoubleClick事件处理程序访问它。

也可以用其他方式设置。你可以让UserControl2成为父窗体上的一个属性,然后UserControl1可以将它的.Parent属性转换为正确的类型,并使用该属性作为引用。

您还可以设置第三类作为singleton,它引用UserControl2

所有这些解决方案的共同点是,UserControl1需要以某种方式引用UserControl2,以便能够对其进行任何操作。

您可以通过让UserControl1引发它的父窗体侦听的事件来避免引用问题。由于父窗体应该已经有对其上所有控件的引用,您可以使窗体代理为您调用UserControl2