private EventReceiverFilter GetEventReceiverFilter() { EventReceiverFilter filter = EventReceiverFilter.ShowAllEvents; switch (this.EventReceiverFilterToolStripComboBox.Text.Replace(" ", string.Empty)) { case "ShowHookedEvents": { filter = EventReceiverFilter.ShowHookedEvents; break; } case "ShowUnhookedEvents": { filter = EventReceiverFilter.ShowUnhookedEvents; break; } default: { filter = EventReceiverFilter.ShowAllEvents; break; } } return(filter); }
private void LoadEventReceivers() { EventReceiverFilter filter = this.GetEventReceiverFilter(); this.Cursor = Cursors.WaitCursor; this.EventReceiverTreeView.Nodes.Clear(); this.EventReceiverPropertyGrid.SelectedObject = null; string[] names = Enum.GetNames(typeof(SPEventReceiverType)); SortedDictionary <string, List <EventHook> > dictionary = new SortedDictionary <string, List <EventHook> >(); foreach (string name in names) { dictionary.Add(name, new List <EventHook>()); } if (this.m_SelectedObject != null) { SPEventReceiverDefinitionCollection definitions = null; if (typeof(SPWeb).IsAssignableFrom(this.m_SelectedObject.GetType())) { SPWeb web = (SPWeb)this.m_SelectedObject; definitions = web.EventReceivers; } else if (typeof(SPList).IsAssignableFrom(this.m_SelectedObject.GetType())) { SPList list = (SPList)this.m_SelectedObject; definitions = list.EventReceivers; } else { MessageBox.Show(this, "The current type is not supported.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } if (definitions != null) { foreach (SPEventReceiverDefinition definition in definitions) { string eventName = definition.Id.ToString("B").ToUpper(); MethodInfo methodHook = null; try { methodHook = Utility.ResolveEventHook(definition.Assembly, definition.Class, definition.Type); } catch { //Ignore Errror } EventHook hook = new EventHook(definition, methodHook); dictionary[eventName].Add(hook); } } foreach (KeyValuePair <string, List <EventHook> > pair in dictionary) { bool show = true; switch (filter) { case EventReceiverFilter.ShowHookedEvents: { if (pair.Value.Count == 0) { show = false; } break; } case EventReceiverFilter.ShowUnhookedEvents: { if (pair.Value.Count > 0) { show = false; } break; } default: { break; } } if (show) { this.EventReceiverTreeView.Nodes.Add(pair.Key, pair.Key, 6, 6); } foreach (EventHook hook in pair.Value) { string typeName = hook.EventDefinition.Type.ToString(); string eventName = hook.EventDefinition.Id.ToString("B").ToUpper(); this.EventReceiverTreeView.Nodes[typeName].Nodes.Add(eventName, hook.EventDefinition.Class, 7, 7); if (hook.MethodInfo == null) { this.EventReceiverTreeView.Nodes[typeName].Nodes[eventName].ForeColor = Color.Red; this.EventReceiverTreeView.Nodes[typeName].Nodes[eventName].ToolTipText = "Invalid Event Receiver. The specified type could not be resolved."; } } } this.EventReceiverTreeView.ExpandAll(); if (this.EventReceiverTreeView.Nodes.Count > 0) { this.EventReceiverTreeView.SelectedNode = this.EventReceiverTreeView.Nodes[0]; } } this.AddToolStripButton.Enabled = true; this.DeleteToolStripButton.Enabled = true; this.DeleteAllToolStripButton.Enabled = true; this.RemoveInvalidToolStripButton.Enabled = true; this.RefreshEventHooksToolStripButton.Enabled = true; this.Cursor = Cursors.Default; }