/// <summary> /// processa os eventos do controlo passsado por argumento /// </summary> /// <param name="c"></param> /// <param name="eventNames"></param> public void addControlEvents(Control c, Dictionary<string, int> eventNames) { Type t=c.GetType(); MethodInfo md = typeof(EventListener).GetMethod("eventRecorder", BindingFlags.NonPublic | BindingFlags.Instance); EventInfo[] evts = t.GetEvents( BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); foreach(EventInfo evt in evts) { ControlEventKey key = new ControlEventKey(c, evt.Name); EventListener l = new EventListener(this, evt.Name); Delegate d = Delegate.CreateDelegate(evt.EventHandlerType, l, md); evt.AddEventHandler(c,d); MethodInfo m = t.GetMethod("On"+evt.Name, BindingFlags.Instance | BindingFlags.NonPublic); methodMap.Add(key,m); if (!eventNames.ContainsKey(evt.Name)) { eventNames.Add(evt.Name, 0); viewer.addEventChooser(evt.Name); } } }
/// <summary> /// regista mais um evento no log, ou não, de acordo com os filtros e memoriza-o /// também para posterior replay, se se estiver em modo de gravação /// </summary> /// <param name="sender"></param> /// <param name="args"></param> /// <param name="key"></param> /// <param name="eventName"></param> public void addEvent(object sender, EventArgs args, ControlEventKey key, string eventName) { if (viewer.Validate(sender, eventName)) { TimeSpan t = DateTime.Now - startTime; viewer.addEvent(eventName); if (Recording) { events.Add(new EventDescriptor(sender, args, methodMap[key], t, eventName)); } } }
internal void eventRecorder(object sender, EventArgs evt) { ControlEventKey key = new ControlEventKey(sender, eventName); if (owner.Recording) owner.addEvent(sender, evt,key,eventName); }