关闭

winfrom事件动态绑定,事件分离,事件叠加

标签: WinFrom事件分离动态绑定C#
282人阅读 评论(0) 收藏 举报
分类:

winfrom事件动态绑定,事件分离,事件叠加


事件分离类




using System;
using System.Linq;
using System.Reflection;
using System.Windows.Forms;

/*
 * 
 *   winfrom事件动态绑定,事件分离,事件叠加 
 *   TimeOmgg 2015-7-10
 *   
 *   public Form1()
 *  {
 *      InitializeComponent();
 *      this.InitHandler(typeof(Handler));
 *  }
 * 
 *     public class Handler
 *  {
 *      [HandlerAttribute("skinLabel1",HadlerEnum.DoubleClick)]
 *      public void a(object sender, EventArgs e)
 *      {
 *          #region 处理
 *          MessageBox.Show("skinLabel1");
 *          #endregion
 *      }
 *  }
 * 
 */

public static class CommFromClickHandler
{
    /// <summary>
    /// 事件分离
    /// </summary>
    /// <param name="model">控件对象</param>
    /// <param name="t">事件类</param>
    public static void InitHandler(this Form model, Type t)
    {
        var methods = t.GetMethods();
        var list = (from method in methods
                    from attr in method.GetCustomAttributes()
                    let attribute = attr as HandlerAttribute
                    where attribute != null
                    let handlers = attribute
                    let target = Activator.CreateInstance(t)
                    let del = Delegate.CreateDelegate(typeof(EventHandler), target, method)
                    let myMethod = del as EventHandler
                    select new HadlerListDto
                    {
                        Control = handlers.ControlName,
                        EventHandler = myMethod,
                        HadlerEnumType = handlers.HadlerEnumType
                    }).ToList();


        #region 事件绑定 自己写
        list.ToList().ForEach(s =>
        {
            var control = PrintCtrlName(model, s.Control);
            if (control == null) return;
            if (s.EventHandler == null) return;
            switch (s.HadlerEnumType)
            {
                case HadlerEnum.Click:
                    control.Click += s.EventHandler;
                    break;
                case HadlerEnum.DoubleClick:
                    control.DoubleClick += s.EventHandler;
                    break;
            }
        });
        #endregion
    }
    //伪代码
    static Control PrintCtrlName(Control parent, string key)
    {
        foreach (Control ctrl in parent.Controls)
        {
            var index = parent.Controls.IndexOfKey(key);
            if (index != -1)
                return parent.Controls[index];
            if (ctrl.Controls.Count <= 0) continue;
            var result = PrintCtrlName(ctrl, key);
            if (result != null)
                return result;
        }
        return null;
    }
}
/// <summary>
/// 标记
/// </summary>
public class HandlerAttribute : Attribute
{
    public HandlerAttribute(string controlName, HadlerEnum hadlerEnumType)
    {
        ControlName = controlName;
        HadlerEnumType = hadlerEnumType;
    }

    /// <summary>
    /// 控件名称
    /// </summary>
    public string ControlName { get; set; }
    /// <summary>
    /// 事件类型
    /// </summary>
    public HadlerEnum HadlerEnumType { get; set; }
}

public class HadlerListDto
{
    public string Control { get; set; }

    public EventHandler EventHandler { get; set; }

    public HadlerEnum HadlerEnumType { get; set; }

}

public enum HadlerEnum
{
    // 摘要: 
    // 此事件与该类无关。
    AutoSizeChanged,
    //
    // 摘要: 
    //     当 System.Windows.Forms.Control.BackColor 属性的值更改时发生。
    BackColorChanged,
    //
    // 摘要: 
    //     当 System.Windows.Forms.Control.BackgroundImage 属性的值更改时发生。
    BackgroundImageChanged,
    //
    // 摘要: 
    //     当 System.Windows.Forms.Control.BackgroundImage  属性更改时发生。
    Changed,
    //
    // 摘要: 
    //     当 System.Windows.Forms.BindingContext 属性的值更改时发生。
    BindingContextChanged,
    //
    // 摘要: 
    //     当 System.Windows.Forms.Control.CausesValidation 属性的值更改时发生。
    CausesValidationChanged,
    //
    // 摘要: 
    //     在焦点或键盘用户界面 (UI) 提示更改时发生。
    ChangeUiCues,
    //
    // 摘要: 
    //     在单击控件时发生。
    Click,
    //
    // 摘要: 
    //     当 System.Windows.Forms.Control.ClientSize 属性的值更改时发生。
    ClientSizeChanged,
    //
    // 摘要: 
    //     当 System.Windows.Forms.Control.ContextMenu 属性的值更改时发生。
    ContextMenuChanged,
    //
    // 摘要: 
    //     当 System.Windows.Forms.Control.ContextMenuStrip 属性的值更改时发生。
    ContextMenuStripChanged,
    //
    // 摘要: 
    //     在将新控件添加到 System.Windows.Forms.Control.ControlCollection 时发生。
    ControlAdded,
    //
    // 摘要: 
    //     在从 System.Windows.Forms.Control.ControlCollection 移除控件时发生。
    ControlRemoved,
    //
    // 摘要: 
    //     当 System.Windows.Forms.Control.Cursor 属性的值更改时发生。
    CursorChanged,
    //
    // 摘要: 
    //     当 System.Windows.Forms.Control.Dock 属性的值更改时发生。
    DockChanged,
    //
    // 摘要: 
    //     在双击控件时发生。
    DoubleClick,
    //
    // 摘要: 
    //     在完成拖放操作时发生。
    DragDrop,
    //
    // 摘要: 
    //     在将对象拖入控件的边界时发生。
    DragEnter,
    //
    // 摘要: 
    //     在将对象拖出控件的边界时发生。
    DragLeave,
    //
    // 摘要: 
    //     在将对象拖到控件的边界上发生。
    DragOver,
    //
    // 摘要: 
    //     在 System.Windows.Forms.Control.Enabled 属性值更改后发生。
    EnabledChanged,
    //
    // 摘要: 
    //     进入控件时发生。
    Enter,
    //
    // 摘要: 
    //     在 System.Windows.Forms.Control.Font 属性值更改时发生。
    FontChanged,
    //
    // 摘要: 
    //     在 System.Windows.Forms.Control.ForeColor 属性值更改时发生。
    ForeColorChanged,
    //
    // 摘要: 
    //     在执行拖动操作期间发生。
    GiveFeedback,
    //
    // 摘要: 
    //     在控件接收焦点时发生。
    GotFocus,
    //
    // 摘要: 
    //     在为控件创建句柄时发生。
    HandleCreated,
    //
    // 摘要: 
    //     在控件的句柄处于销毁过程中时发生。
    HandleDestroyed,
    //
    // 摘要: 
    //     当用户请求控件的帮助时发生。
    HelpRequested,
    //
    // 摘要: 
    //     在 System.Windows.Forms.Control.ImeMode 属性更改后发生。
    ImeModeChanged,
    //
    // 摘要: 
    //     在控件的显示需要重绘时发生。
    Invalidated,
    //
    // 摘要: 
    //     在控件有焦点的情况下按下键时发生。
    Down,
    //
    // 摘要: 
    //     在控件有焦点的情况下按下键时发生。
    Press,
    //
    // 摘要: 
    //     在控件有焦点的情况下释放键时发生。
    Up,
    // 摘要: 
    //     在输入焦点离开控件时发生。
    Leave,
    //
    // 摘要: 
    //     在 System.Windows.Forms.Control.Location 属性值更改后发生。
    LocationChanged,
    //
    // 摘要: 
    //     当控件失去焦点时发生。
    LostFocus,
    //
    // 摘要: 
    //     在控件边距更改时发生。
    MarginChanged,
    //
    // 摘要: 
    //     当控件失去鼠标捕获时发生。
    CaptureChanged,
    //
    // 摘要: 
    //     在鼠标指针停放在控件上时发生。
    Hover,
    //
    // 摘要: 
    //     在移动鼠标滚轮并且控件有焦点时发生。
    Wheel,
    //
    // 摘要: 
    //     在移动控件时发生。
    Move,
    //
    // 摘要: 
    //     在控件空白区更改时发生。
    PaddingChanged,
    //
    // 摘要: 
    //     在重绘控件时发生。
    Paint,
    //
    // 摘要: 
    //     在 System.Windows.Forms.Control.Parent 属性值更改时发生。
    ParentChanged,
    //
    // 摘要: 
    //     在 System.Windows.Forms.AccessibleObject 为辅助功能应用程序提供帮助时发生。
    QueryAccessibilityHelp,
    //
    // 摘要: 
    //     在拖放操作期间发生,并且允许拖动源确定是否应取消拖放操作。
    QueryContinueDrag,
    //
    // 摘要: 
    //     当 System.Windows.Forms.Control.Region 属性的值更改时发生。
    RegionChanged,
    //
    // 摘要: 
    //     在调整控件大小时发生。
    Resize,
    //
    // 摘要: 
    //     在 System.Windows.Forms.Control.RightToLeft 属性值更改时发生。
    RightToLeftChanged,
    //
    // 摘要: 
    //     在 System.Windows.Forms.Control.Size 属性值更改时发生。
    SizeChanged,
    //
    // 摘要: 
    //     在控件样式更改时发生。
    StyleChanged,
    //
    // 摘要: 
    //     系统颜色更改时发生。
    SystemColorsChanged,
    //
    // 摘要: 
    //     在 System.Windows.Forms.Control.TabIndex 属性值更改时发生。
    TabIndexChanged,
    //
    // 摘要: 
    //     在 System.Windows.Forms.Control.TabStop 属性值更改时发生。
    TabStopChanged,
    //
    // 摘要: 
    //     在 System.Windows.Forms.Control.Text 属性值更改时发生。
    TextChanged,
    //
    // 摘要: 
    //     在控件完成验证时发生。
    Validated,
    //
    // 摘要: 
    //     在控件正在验证时发生。
    Validating,
    //
    // 摘要: 
    //     在 System.Windows.Forms.Control.Visible 属性值更改时发生。
    VisibleChanged,
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6415次
    • 积分:2
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    最新评论