public AttributeInspectorForm()
        {
            InitializeComponent();

            /* remove existing tabs and add in our attribute property tabs */
            List<Type> tabsToRemove = new List<Type>();
            foreach (PropertyTab tabToRemove in attributePropertyGrid.PropertyTabs)
                tabsToRemove.Add(tabToRemove.GetType());
            foreach (Type tabToRemove in tabsToRemove)
                attributePropertyGrid.PropertyTabs.RemoveTabType(tabToRemove);
            attributePropertyGrid.PropertyTabs.AddTabType(typeof(GraphPropertyTab), PropertyTabScope.Static);
            attributePropertyGrid.PropertyTabs.AddTabType(typeof(NodePropertyTab), PropertyTabScope.Static);
            attributePropertyGrid.PropertyTabs.AddTabType(typeof(EdgePropertyTab), PropertyTabScope.Static);

            _inspected = null;
            _inspectMainForm = delegate(object sender, EventArgs e)
            {
                /* if the main form has a graph, monitor its changes and show its properties */
                GraphForm graphForm = FormController.Instance.MainForm as GraphForm;
                if (graphForm != null)
                {
                    if (_inspected != null)
                        _inspected.Changed -= _inspectMainForm;
                    _inspected = graphForm;
                    _inspected.Changed += _inspectMainForm;

                    Text = "Attributes of " + graphForm.Text;
                    attributePropertyGrid.SelectedObject = graphForm.Graph;
                }
            };

            /* inspect the graph when the handle has been created */
            /* NOTE: if we set the SelectedObject BEFORE the handle has been created, this damages the property tabs, a Microsoft bug */
            if (attributePropertyGrid.IsHandleCreated)
                _inspectMainForm(this, EventArgs.Empty);
            else
                attributePropertyGrid.HandleCreated += _inspectMainForm;

            /* inspect the graph when the main form changes */
            FormController.Instance.MainFormChanged += _inspectMainForm;
        }