在反射中实现用户自定义控件的事件响应

在一个插件平台系统的开发中需要在主界面上对用户自定义控件中的事件进行响应,由于用户控件是使用反射动态加载的,因此需要在反射中对事件进行响应。

即将用户控件中的Button 的Click事件委托给主界面中的函数响应。

用户控件:

namespace StatisticPlugin
{
    //delegate
    public delegate void LOSClickHandle(Object sender, EventArgs e);
 
    public partial class Statistic : UserControl
    {           
        //event
        public event LOSClickHandle LOSClick;
 
        public Statistic()
        {
            InitializeComponent();
        }
 
        private void btnLOSClicked(Object sender, EventArgs e)
        {
            if (LOSClick != null)
                LOSClick(sender, e);
        }     
    }
}

主界面

    public partial class MainWindow : Window
    {       
        //...//
        public void Initialization()
        {
            Assembly asm = Assembly.LoadFrom("..\\..\\..\\Plugins\\Statistic.dll");
            Type[] types = asm.GetExportedTypes();
            Type type = types[0];
            Object objStatistic = Activator.CreateInstance(type);   
            EventInfo LOSClick = type.GetEvent("LOSClick");
            Type handlerType = LOSClick.EventHandlerType;
            MethodInfo eventHandler = typeof(MainWindow).GetMethod("onLOSClicked",
                 BindingFlags.NonPublic |BindingFlags.Instance);
            Delegate delegateLOS = Delegate.CreateDelegate(handlerType,
                 this, eventHandler,true);
            LOSClick.AddEventHandler(objStatistic, delegateLOS);
        }
 
        private void onLOSClicked(object sender, Event e)
        {
            //...//
        }

要点:

1.在用户自定义控件(Window)中将Window中的Button的Click事件委托给主界面Window的函数实现事件的响应。

2.在反射得到的用户自定义控件对象中查找该事件,并将其委托给指定函数。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值