void mdiClient_ControlAdded(object sender, ControlEventArgs e)
            {
                MetroWindow mw = e.Control as MetroWindow;

                if (mw == null)
                {
                    throw new ArgumentException("Si possono aggiungere solo finestre di tipo MetroWindow");
                }

                MDITab tab = new MDITab();

                tab.AssociateForm    = mw;
                tab.State            = MDITab.EMDITabState.NORMAL;
                tab.CloseButtonState = MDITab.EMDITabCloseButtonState.NORMAL;

                Rectangle lastTabRect = new Rectangle();
                Rectangle newTabRect  = new Rectangle();

                if (_mdiTabs.Count > 0)
                {
                    lastTabRect = _mdiTabs[_mdiTabs.Count - 1].TabRect;
                }

                Graphics g = CreateGraphics();

                if (g == null)
                {
                    throw new NullReferenceException();
                }

                MetroWindow p = ParentForm as MetroWindow;

                if (p == null)
                {
                    throw new Exception("Il form padre deve essere una finestra di tipo MetroWindow");
                }

                MetroVisualManager vm = p.VisualManager();

                int width = (int)(g.MeasureString(mw.Text, vm.MDITabFont).Width + 30);

                newTabRect.Location = new Point(lastTabRect.Location.X + lastTabRect.Width, 0);
                newTabRect.Size     = new Size(width, 21);

                tab.TabRect = newTabRect;

                _mdiTabs.Add(tab);
                _dropDownFileList.AddItem(mw.Text);
            }
            protected virtual void OnUpdateMDITabsCloses(Point point)
            {
                bool      bInvalidate = false;
                Rectangle rc          = _tabsRectangle;

                rc = ParentForm.RectangleToScreen(rc);

                if (!rc.Contains(point))
                {
                    ResetMDITabsState();
                    return;
                }

                MetroWindow formToClose = null;

                for (int i = 0; i < _mdiTabs.Count; i++)
                {
                    MDITab tab = _mdiTabs[i];

                    rc = tab.CloseTabRect;
                    rc = ParentForm.RectangleToScreen(rc);

                    if (rc.Contains(point))
                    {
                        formToClose = tab.AssociateForm;
                        bInvalidate = true;
                    }
                }

                if (formToClose != null)
                {
                    formToClose.Close();
                }

                if (bInvalidate)
                {
                    UpdateColors();
                }
            }
            protected virtual void OnUpdateMDITabsState(IntPtr handle)
            {
                MetroWindow wnd = MetroWindow.FromHandle(handle) as MetroWindow;

                if (wnd == null)
                {
                    throw new ArgumentException("Child form must be a MetroWindow derived class");
                }

                for (int i = 0; i < _mdiTabs.Count; i++)
                {
                    MDITab tab = _mdiTabs[i];

                    if (tab.AssociateForm == wnd)
                    {
                        tab.State = MDITab.EMDITabState.SELECTED;
                    }
                    else
                    {
                        tab.State = MDITab.EMDITabState.NORMAL;
                    }
                }
            }
            protected virtual void OnUpdateMDITabsSelection(Point point)
            {
                bool      bInvalidate            = false;
                bool      bFoundCloseButtonPress = false;
                Rectangle rc = _tabsRectangle;

                rc = ParentForm.RectangleToScreen(rc);

                if (!rc.Contains(point))
                {
                    ResetMDITabsState();
                    return;
                }

                for (int i = 0; i < _mdiTabs.Count; i++)
                {
                    MDITab tab = _mdiTabs[i];

                    rc = tab.CloseTabRect;
                    rc = ParentForm.RectangleToScreen(rc);

                    if (rc.Contains(point))
                    {
                        if (tab.CloseButtonState != MDITab.EMDITabCloseButtonState.PRESSED)
                        {
                            tab.CloseButtonState   = MDITab.EMDITabCloseButtonState.PRESSED;
                            bFoundCloseButtonPress = true;
                            bInvalidate            = true;
                        }
                    }
                    else if (tab.CloseButtonState != MDITab.EMDITabCloseButtonState.NORMAL)
                    {
                        tab.CloseButtonState = MDITab.EMDITabCloseButtonState.NORMAL;
                        bInvalidate          = true;
                    }
                }

                if (!bFoundCloseButtonPress)
                {
                    MetroWindow formToActivate = null;
                    for (int i = 0; i < _mdiTabs.Count; i++)
                    {
                        MDITab tab = _mdiTabs[i];

                        if (tab.State != MDITab.EMDITabState.SELECTED)
                        {
                            rc = tab.TabRect;
                            rc = ParentForm.RectangleToScreen(rc);

                            if (rc.Contains(rc))
                            {
                                formToActivate = tab.AssociateForm;
                                tab.State      = MDITab.EMDITabState.SELECTED;
                                bInvalidate    = true;
                            }
                            else
                            {
                                tab.State   = MDITab.EMDITabState.NORMAL;
                                bInvalidate = true;
                            }
                        }
                    }

                    if (formToActivate != null)
                    {
                        formToActivate.Activate();
                    }
                }

                if (bInvalidate)
                {
                    UpdateColors();
                }
            }
            protected virtual void OnUpdateMDITabsState(Point point)
            {
                bool      bInvalidate = false;
                Rectangle rc          = _tabsRectangle;

                rc = ParentForm.RectangleToScreen(rc);

                if (!rc.Contains(point))
                {
                    ResetMDITabsState();
                    return;
                }

                for (int i = 0; i < _mdiTabs.Count; i++)
                {
                    MDITab tab = _mdiTabs[i];

                    if (tab.State != MDITab.EMDITabState.SELECTED)
                    {
                        rc = tab.TabRect;
                        rc = ParentForm.RectangleToScreen(rc);

                        if (rc.Contains(point))
                        {
                            if (tab.State != MDITab.EMDITabState.HOVER)
                            {
                                tab.State   = MDITab.EMDITabState.HOVER;
                                bInvalidate = true;
                            }
                        }
                        else
                        {
                            if (tab.State != MDITab.EMDITabState.NORMAL)
                            {
                                tab.State   = MDITab.EMDITabState.NORMAL;
                                bInvalidate = true;
                            }
                        }
                    }

                    rc = tab.CloseTabRect;
                    rc = ParentForm.RectangleToScreen(rc);

                    if (rc.Contains(point))
                    {
                        if (tab.CloseButtonState == MDITab.EMDITabCloseButtonState.NORMAL)
                        {
                            tab.CloseButtonState = MDITab.EMDITabCloseButtonState.HOVER;
                            bInvalidate          = true;
                        }
                    }
                    else if (tab.CloseButtonState != MDITab.EMDITabCloseButtonState.NORMAL)
                    {
                        tab.CloseButtonState = MDITab.EMDITabCloseButtonState.NORMAL;
                        bInvalidate          = true;
                    }
                }

                if (bInvalidate)
                {
                    UpdateColors();
                }
            }