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;
        }