private static Action <object> GetRegAction(EventHandlerType type) { Action <object> act = null; dic.TryGetValue(type, out act); return(act); }
public static Task <ReturnType> MethodNameTaskAsync(this NNNNService service, A a) { if (service == null) { throw new NullReferenceException(); } var tcs = new TaskCompletionSource <ReturnType>(); EventHandlerType handler = null; handler = (s, o) => { service.MethodNameCompleted -= handler; tcs.TrySetCompleted(o.Result); }; service.MethodNameCompleted += handler; try { service.MethodNameAsync(); } catch { service.MethodNameCompleted -= handler; throw; } return(tcs.Task); }
public override string ToString() { return(new System.Text.StringBuilder(EventHandlerType.ToString()) .Append(' ') .Append(Name) .ToString()); }
private static MethodBuilder EmitNotifyPropertyChanged(TypeBuilder typeBuilder, FieldBuilder eventFieldBuilder) { var methodBuilder = typeBuilder.DefineMethod("NotifyPropertyChanged", DefaultMethodAttributes, null, new Type[] { typeof(PropertyChangedEventArgs) }); var methodIl = methodBuilder.GetILGenerator(); var labelExit = methodIl.DefineLabel(); // if (PropertyChanged == null) // { // return; // } methodIl.Emit(OpCodes.Ldarg_0); methodIl.Emit(OpCodes.Ldfld, eventFieldBuilder); methodIl.Emit(OpCodes.Ldnull); methodIl.Emit(OpCodes.Ceq); methodIl.Emit(OpCodes.Brtrue, labelExit); // this.PropertyChanged(this,PropertyChangedEventArgs); methodIl.Emit(OpCodes.Ldarg_0); methodIl.Emit(OpCodes.Ldfld, eventFieldBuilder); methodIl.Emit(OpCodes.Ldarg_0); methodIl.Emit(OpCodes.Ldarg_1); methodIl.EmitCall(OpCodes.Callvirt, EventHandlerType.GetMethod("Invoke"), null); // return; methodIl.MarkLabel(labelExit); methodIl.Emit(OpCodes.Ret); return(methodBuilder); }
public static void RegisterEvnet(EventHandlerType type, Action <object> action) { Action <object> act = GetRegAction(type); act += action; dic[type] = act; }
public static void ExcuteEvent(EventHandlerType type, object obj) { Action <object> act = GetRegAction(type); if (act != null) { act(obj); } }
public void AddHandler(EventHandlerType type, beRemoteBaseEventListener handler) { switch (type) { case EventHandlerType.ConnectionStateChanged: _connectionStateChangedEvent += new ConnectionStateChangedEventHandler(handler.DoWork); break; } }
public static void UnRegisterEvent(EventHandlerType type, Action <object> action) { Action <object> act = GetRegAction(type); if (act != null) { act -= action; dic[type] = act; } }
public void OnEvent(EventHandlerType type, beRemoteEventArgs e) { switch (type) { case EventHandlerType.ConnectionStateChanged: if (_connectionStateChangedEvent != null) { _connectionStateChangedEvent(new object(), (ConnectionStateChangedEventArgs)e); } break; } }
public List <ParameterClass> GetParameters(IMethod method) { List <ParameterClass> pcs = new List <ParameterClass>(); if (EventHandlerType.IsLibType) { ParameterInfo[] pifs = null; MethodInfo mif = EventHandlerType.LibTypePointer.ClassType.GetMethod("Invoke"); pifs = mif.GetParameters(); if (pifs != null && pifs.Length > 0) { for (int i = 0; i < pifs.Length; i++) { if (pifs[i].ParameterType.IsGenericParameter) { DataTypePointer dt = EventHandlerType.GetConcreteType(pifs[i].ParameterType); if (dt != null) { pcs.Add(new ParameterClass(dt.BaseClassType, pifs[i].Name, this, new MethodInfoPointer(mif))); continue; } } pcs.Add(new ParameterClass(pifs[i].ParameterType, pifs[i].Name, this, new MethodInfoPointer(mif))); } } } else { //use custom delegate type, it is a list of parameters if (EventHandlerType.ClassTypePointer == null) { throw new DesignerException("Custom event handler type cannot be null"); } CustomEventHandlerType ceht = EventHandlerType.ClassTypePointer as CustomEventHandlerType; if (ceht == null) { throw new DesignerException("Invalid custom event handler type: {0}", EventHandlerType.ClassTypePointer.GetType().Name); } if (ceht.Parameters != null) { foreach (NamedDataType ndt in ceht.Parameters) { pcs.Add(new ParameterClass(ndt.BaseClassType, ndt.Name, method)); } } } return(pcs); }
/// <summary> /// 绑定事件. /// </summary> /// <typeparam name="A">事件的 EventArgs 类型.</typeparam> /// <param name="target">将绑定的目标实例, 如果绑定静态事件, 可以为 null.</param> /// <param name="type">如果绑定静态事件, 可以指定类型.</param> /// <param name="eventName">事件的名称.</param> /// <param name="eventType">事件的类型.</param> /// <param name="handler">委托, 在事件触发时执行.</param> public void BindEvent <A> (object target, Type type, string eventName, EventHandlerType eventType, Action <object, A> handler) where A : EventArgs { if (null == handler) { return; } EventInfo eventInfo = this.getEventInfo(target, type, eventName); if (null == eventInfo) { return; } Delegate eventHandler; try { // TODO: (自定义) 当修改 EventHandlerType 时, 请在下面的 switch 中生成对应的事件. switch (eventType) { case EventHandlerType.KeyEventHandler: eventHandler = new KeyEventHandler(handler as Action <object, KeyEventArgs>); break; case EventHandlerType.KeyPressEventHandler: eventHandler = new KeyPressEventHandler(handler as Action <object, KeyPressEventArgs>); break; case EventHandlerType.MouseEventHandler: eventHandler = new MouseEventHandler(handler as Action <object, MouseEventArgs>); break; case EventHandlerType.EventHandler: default: eventHandler = new EventHandler(handler as Action <object, EventArgs>); break; } eventInfo.AddEventHandler(target, eventHandler); } catch { } }
public void AddEventHandler(Object target, Delegate handler) { MethodInfo add = GetAddMethod(true); if (add == null) { throw new MemberAccessException (_("Reflection_NoEventAdd")); } if (handler == null || !EventHandlerType.IsAssignableFrom(handler.GetType())) { throw new ArgumentException (_("Reflection_InvalidEventHandler")); } Object[] parameters = new Object [1]; parameters[0] = handler; add.Invoke(target, parameters); }
protected void bindPagerEvent <A> (object target, Type type, string eventName, EventHandlerType eventType, string tableName, PagerActionType actionType) where A : EventArgs { #if V3_5 || V4 this.BindEvent <A> (target, type, eventName, eventType, delegate(object sender, A e) { if (!string.IsNullOrEmpty(tableName) && this.tableSettings.ContainsKey(tableName)) { this.setPager(this.tableSettings[tableName], actionType, this.window.GetPagerIndex(this.tableSettings[tableName])); } } ); #else this.BindEvent <A> (target, type, eventName, eventType, null); #endif }
public override string ToString() { return(EventHandlerType.ToString() + " " + Name); }
protected void bindSetIsRowCheckedEvent <A> (object target, Type type, string eventName, EventHandlerType eventType, string tableName, bool?isChecked, string viewFilter) where A : EventArgs { #if V3_5 || V4 this.BindEvent <A> (target, type, eventName, eventType, delegate(object sender, A e) { if (!string.IsNullOrEmpty(tableName) && this.tableSettings.ContainsKey(tableName)) { this.setIsRowChecked(this.tableSettings[tableName], isChecked, viewFilter); } } ); #else this.BindEvent <A> (target, type, eventName, eventType, null); #endif }
/// <summary> /// 绑定可以触发分页相关操作的事件, 比如: Button 的 Click 事件. /// </summary> /// <typeparam name="A">事件的参数类型, 必须从 EventArgs 派生.</typeparam> /// <param name="target">目标实例, 比如: 窗口上的 Button.</param> /// <param name="eventName">事件名称, 比如: "Click".</param> /// <param name="eventType">事件的类型, 比如: EventHandler.</param> /// <param name="tableName">表格的名称, 与 TableSetting 的 Name 一致.</param> /// <param name="actionType">分页操作类型.</param> public void BindPagerEvent <A> (object target, string eventName, EventHandlerType eventType, string tableName, PagerActionType actionType) where A : EventArgs { this.bindPagerEvent <A> (target, null, eventName, eventType, tableName, actionType); }
/// <summary> /// 绑定可以触发设置行选中状态的事件, 比如: Button 的 Click 事件. /// </summary> /// <typeparam name="A">事件的参数类型, 必须从 EventArgs 派生.</typeparam> /// <param name="target">目标实例, 比如: 窗口上的 Button.</param> /// <param name="eventName">事件名称, 比如: "Click".</param> /// <param name="eventType">事件的类型, 比如: EventHandler.</param> /// <param name="tableName">表格的名称, 与 TableSetting 的 Name 一致.</param> /// <param name="isChecked">行是否被选中, 可以为 null, 则取反.</param> /// <param name="viewFilter">过滤条件, 只有符合条件的行才会设置选中状态, 可以为 null, 则使用 IWindow 提供的条件.</param> public void BindSetIsRowCheckedEvent <A> (object target, string eventName, EventHandlerType eventType, string tableName, bool?isChecked, string viewFilter) where A : EventArgs #endif { this.bindSetIsRowCheckedEvent <A> (target, null, eventName, eventType, tableName, isChecked, viewFilter); }
/// <summary> /// 绑定可以触发设置行选中状态的事件, 比如: Button 的 Click 事件. /// </summary> /// <typeparam name="A">事件的参数类型, 必须从 EventArgs 派生.</typeparam> /// <param name="target">目标实例, 比如: 窗口上的 Button.</param> /// <param name="eventName">事件名称, 比如: "Click".</param> /// <param name="eventType">事件的类型, 比如: EventHandler.</param> /// <param name="tableName">表格的名称, 与 TableSetting 的 Name 一致.</param> /// <param name="isChecked">行是否被选中, 可以为 null, 则取反.</param> /// <param name="viewFilter">过滤条件, 只有符合条件的行才会设置选中状态, 可以为 null, 则使用 IWindow 提供的条件, 默认为 null.</param> public void BindSetIsRowCheckedEvent <A> (object target, string eventName, EventHandlerType eventType, string tableName, bool?isChecked, string viewFilter = null) where A : EventArgs
protected void bindDataEvent <A> (object target, Type type, string eventName, EventHandlerType eventType, DataActionType actionType, params string[] tableNames) where A : EventArgs { #if V3_5 || V4 this.BindEvent <A> (target, type, eventName, eventType, delegate(object sender, A e) { if (null == tableNames) { return; } List <TableSetting <P> > tableSettings = new List <TableSetting <P> > ( ); foreach (string tableName in tableNames) { if (!string.IsNullOrEmpty(tableName) && this.tableSettings.ContainsKey(tableName)) { TableSetting <P> tableSetting = this.tableSettings[tableName]; tableSetting.FilterRows.Clear( ); tableSetting.FilterAddedRows.Clear( ); tableSetting.FilterDeletedRows.Clear( ); tableSetting.FilterModifiedRows.Clear( ); tableSetting.AddedRows.Clear( ); tableSetting.DeletedRows.Clear( ); tableSetting.ModifiedRows.Clear( ); foreach (DataRowView rowView in this.getView(tableSetting, null, true)) { tableSetting.FilterRows.Add(rowView.Row); switch (rowView.Row.RowState) { case DataRowState.Added: tableSetting.FilterAddedRows.Add(rowView.Row); break; case DataRowState.Deleted: tableSetting.FilterDeletedRows.Add(rowView.Row); break; case DataRowState.Modified: tableSetting.FilterModifiedRows.Add(rowView.Row); break; } } foreach (DataRow row in tableSetting.Table.Rows) { switch (row.RowState) { case DataRowState.Added: tableSetting.AddedRows.Add(row); break; case DataRowState.Deleted: tableSetting.DeletedRows.Add(row); break; case DataRowState.Modified: tableSetting.ModifiedRows.Add(row); break; } } tableSettings.Add(tableSetting); } } switch (actionType) { case DataActionType.Fill: this.fillData(tableSettings.ToArray( )); break; case DataActionType.Add: this.addData(tableSettings.ToArray( )); break; case DataActionType.Delete: this.deleteData(tableSettings.ToArray( )); break; case DataActionType.Modify: this.modifyData(tableSettings.ToArray( )); break; case DataActionType.Update: this.updateData(tableSettings.ToArray( )); break; } foreach (TableSetting <P> tableSetting in tableSettings) { this.dataCompleted(tableSetting, actionType); } } ); #else this.BindEvent <A> (target, type, eventName, eventType, null); #endif }
/// <summary> /// 绑定可以触发 DataTable 数据事件, 比如: Button 的 Click 事件, 当按钮被点击时, 填充 DataTable. /// </summary> /// <typeparam name="A">事件的参数类型, 必须从 EventArgs 派生.</typeparam> /// <param name="target">目标实例, 比如: 窗口上的 Button.</param> /// <param name="eventName">事件名称, 比如: "Click".</param> /// <param name="eventType">事件的类型, 比如: EventHandler.</param> /// <param name="actionType">行为的类型.</param> /// <param name="tableNames">表格的名称, 与 TableSetting 的 Name 一致.</param> public void BindDataEvent <A> (object target, string eventName, EventHandlerType eventType, DataActionType actionType, params string[] tableNames) where A : EventArgs { this.bindDataEvent <A> (target, null, eventName, eventType, actionType, tableNames); }
/// <summary> /// 绑定事件. /// </summary> /// <typeparam name="A">事件的 EventArgs 类型.</typeparam> /// <param name="target">将绑定的目标实例, 如果绑定静态事件, 可以为 null.</param> /// <param name="type">如果绑定静态事件, 可以指定类型.</param> /// <param name="eventName">事件的名称.</param> /// <param name="eventType">事件的类型.</param> /// <param name="handler">委托, 在事件触发时执行.</param> public void BindEvent <A> (object target, Type type, string eventName, EventHandlerType eventType, Delegate handler) where A : EventArgs { throw new NotImplementedException(".NET 3.5 以下版本中方法尚未实现, 请切定义 V3_5 或者 V4, 并换到 3.5 或者 4 版本"); }
/// <summary> /// Set Event Handlers Type to Work Chat System with it /// </summary> /// <param name="handlerType">Type of Event Handler You Want to Set</param> public static void SetEventHandlersType(EventHandlerType handlerType) { HandlerType = handlerType; }
// 创建绑定弹出消息的方法 public void BindPopMessageEvent <A> (object target, Type type, string eventName, EventHandlerType eventType, string message) where A : EventArgs { #if V3_5 || V4 this.BindEvent <A> (target, type, eventName, eventType, delegate(object sender, A e) { MessageBox.Show(message); } ); #endif }