SetActiveToolStrip() static private méthode

static private SetActiveToolStrip ( ToolStrip toolStrip, bool keyboard ) : void
toolStrip ToolStrip
keyboard bool
Résultat void
        public void Show(Point position, ToolStripDropDownDirection direction)
        {
            this.PerformLayout();

            Point show_point = CalculateShowPoint(position, direction, Size);

            if (this.Location != show_point)
            {
                this.Location = show_point;
            }

            // Prevents recursion
            if (Visible)
            {
                return;
            }

            CancelEventArgs e = new CancelEventArgs();

            this.OnOpening(e);

            if (e.Cancel)
            {
                return;
            }

            // The tracker lets us know when the form is clicked or loses focus
            ToolStripManager.AppClicked     += new EventHandler(ToolStripMenuTracker_AppClicked);
            ToolStripManager.AppFocusChange += new EventHandler(ToolStripMenuTracker_AppFocusChange);

            bool useNativeMenu = true;

            foreach (var item in this.Items)
            {
                useNativeMenu &= item is ToolStripMenuItem || item is ToolStripSeparator;
            }

            if (useNativeMenu)
            {
                currentMenu = ToNSMenu();
                ((MonoMenuDelegate)currentMenu.Delegate).BeforePopup();
                show_point = CalculateShowPoint(position, direction, new Size((int)currentMenu.Size.Width, (int)currentMenu.Size.Height));
                NSApplication.SharedApplication.BeginInvokeOnMainThread(delegate {
                    Size displaySize;
                    XplatUI.GetDisplaySize(out displaySize);
                    currentMenu.PopUpMenu(null, new CGPoint(show_point.X, displaySize.Height - show_point.Y), null);
                });
            }

            base.Show();

            ToolStripManager.SetActiveToolStrip(this, ToolStripManager.ActivatedByKeyboard);

            // Called from NSMenuDelegate for native menus
            if (!useNativeMenu)
            {
                this.OnOpened(EventArgs.Empty);
            }
        }
        internal override void Dismiss(ToolStripDropDownCloseReason reason)
        {
            this.Close(reason);
            base.Dismiss(reason);

            // ContextMenuStrip won't have a parent
            if (this.OwnerItem == null)
            {
                return;
            }

            // Ensure Submenu loes keyboard capture when closing.
            ToolStripManager.SetActiveToolStrip(null, false);
        }
        internal override bool ProcessArrowKey(Keys keyData)
        {
            switch (keyData)
            {
            case Keys.Down:
            case Keys.Tab:
                this.SelectNextToolStripItem(this.GetCurrentlySelectedItem(), true);
                return(true);

            case Keys.Up:
            case Keys.Shift | Keys.Tab:
                this.SelectNextToolStripItem(this.GetCurrentlySelectedItem(), false);
                return(true);

            case Keys.Right:
                this.GetTopLevelToolStrip().SelectNextToolStripItem(this.TopLevelOwnerItem, true);
                return(true);

            case Keys.Left:
            case Keys.Escape:
                this.Dismiss(ToolStripDropDownCloseReason.Keyboard);

                // ContextMenuStrip won't have a parent
                if (this.OwnerItem == null)
                {
                    return(true);
                }

                ToolStrip parent_strip = this.OwnerItem.Parent;
                ToolStripManager.SetActiveToolStrip(parent_strip, true);

                if (parent_strip is MenuStrip && keyData == Keys.Left)
                {
                    parent_strip.SelectNextToolStripItem(this.TopLevelOwnerItem, false);
                    this.TopLevelOwnerItem.Invalidate();
                }
                else if (parent_strip is MenuStrip && keyData == Keys.Escape)
                {
                    (parent_strip as MenuStrip).MenuDroppedDown = false;
                    this.TopLevelOwnerItem.Select();
                }
                return(true);
            }

            return(false);
        }
Exemple #4
0
        internal override bool OnMenuKey()
        {
            // Set ourselves active and select our first item
            ToolStripManager.SetActiveToolStrip(this, true);
            ToolStripItem tsi = this.SelectNextToolStripItem(null, true);

            if (tsi == null)
            {
                return(false);
            }

            if (tsi is MdiControlStrip.SystemMenuItem)
            {
                this.SelectNextToolStripItem(tsi, true);
            }

            return(true);
        }
Exemple #5
0
        protected internal override bool ProcessMnemonic(char charCode)
        {
            if (!this.Selected)
            {
                this.Parent.ChangeSelection(this);
            }

            if (this.HasDropDownItems)
            {
                ToolStripManager.SetActiveToolStrip(this.Parent, true);
                this.ShowDropDown();
                this.DropDown.SelectNextToolStripItem(null, true);
            }
            else
            {
                this.PerformClick();
            }

            return(true);
        }
        public void Show(Point position, ToolStripDropDownDirection direction)
        {
            this.PerformLayout();

            Point show_point = position;
            Point max_screen = new Point(SystemInformation.VirtualScreen.Width, SystemInformation.VirtualScreen.Height);

            if (this is ContextMenuStrip)
            {
                // If we are going to go offscreen, adjust our direction so we don't...
                // X direction
                switch (direction)
                {
                case ToolStripDropDownDirection.AboveLeft:
                    if (show_point.X - this.Width < 0)
                    {
                        direction = ToolStripDropDownDirection.AboveRight;
                    }
                    break;

                case ToolStripDropDownDirection.BelowLeft:
                    if (show_point.X - this.Width < 0)
                    {
                        direction = ToolStripDropDownDirection.BelowRight;
                    }
                    break;

                case ToolStripDropDownDirection.Left:
                    if (show_point.X - this.Width < 0)
                    {
                        direction = ToolStripDropDownDirection.Right;
                    }
                    break;

                case ToolStripDropDownDirection.AboveRight:
                    if (show_point.X + this.Width > max_screen.X)
                    {
                        direction = ToolStripDropDownDirection.AboveLeft;
                    }
                    break;

                case ToolStripDropDownDirection.BelowRight:
                case ToolStripDropDownDirection.Default:
                    if (show_point.X + this.Width > max_screen.X)
                    {
                        direction = ToolStripDropDownDirection.BelowLeft;
                    }
                    break;

                case ToolStripDropDownDirection.Right:
                    if (show_point.X + this.Width > max_screen.X)
                    {
                        direction = ToolStripDropDownDirection.Left;
                    }
                    break;
                }

                // Y direction
                switch (direction)
                {
                case ToolStripDropDownDirection.AboveLeft:
                    if (show_point.Y - this.Height < 0)
                    {
                        direction = ToolStripDropDownDirection.BelowLeft;
                    }
                    break;

                case ToolStripDropDownDirection.AboveRight:
                    if (show_point.Y - this.Height < 0)
                    {
                        direction = ToolStripDropDownDirection.BelowRight;
                    }
                    break;

                case ToolStripDropDownDirection.BelowLeft:
                    if (show_point.Y + this.Height > max_screen.Y && show_point.Y - this.Height > 0)
                    {
                        direction = ToolStripDropDownDirection.AboveLeft;
                    }
                    break;

                case ToolStripDropDownDirection.BelowRight:
                case ToolStripDropDownDirection.Default:
                    if (show_point.Y + this.Height > max_screen.Y && show_point.Y - this.Height > 0)
                    {
                        direction = ToolStripDropDownDirection.AboveRight;
                    }
                    break;

                case ToolStripDropDownDirection.Left:
                    if (show_point.Y + this.Height > max_screen.Y && show_point.Y - this.Height > 0)
                    {
                        direction = ToolStripDropDownDirection.AboveLeft;
                    }
                    break;

                case ToolStripDropDownDirection.Right:
                    if (show_point.Y + this.Height > max_screen.Y && show_point.Y - this.Height > 0)
                    {
                        direction = ToolStripDropDownDirection.AboveRight;
                    }
                    break;
                }
            }

            switch (direction)
            {
            case ToolStripDropDownDirection.AboveLeft:
                show_point.Y -= this.Height;
                show_point.X -= this.Width;
                break;

            case ToolStripDropDownDirection.AboveRight:
                show_point.Y -= this.Height;
                break;

            case ToolStripDropDownDirection.BelowLeft:
                show_point.X -= this.Width;
                break;

            case ToolStripDropDownDirection.Left:
                show_point.X -= this.Width;
                break;

            case ToolStripDropDownDirection.Right:
                break;
            }

            // Fix offscreen horizontal positions
            if ((show_point.X + this.Width) > max_screen.X)
            {
                show_point.X = max_screen.X - this.Width;
            }
            if (show_point.X < 0)
            {
                show_point.X = 0;
            }

            // Fix offscreen vertical positions
            if ((show_point.Y + this.Height) > max_screen.Y)
            {
                show_point.Y = max_screen.Y - this.Height;
            }
            if (show_point.Y < 0)
            {
                show_point.Y = 0;
            }

            if (this.Location != show_point)
            {
                this.Location = show_point;
            }

            CancelEventArgs e = new CancelEventArgs();

            this.OnOpening(e);

            if (e.Cancel)
            {
                return;
            }

            // The tracker lets us know when the form is clicked or loses focus
            ToolStripManager.AppClicked     += new EventHandler(ToolStripMenuTracker_AppClicked);
            ToolStripManager.AppFocusChange += new EventHandler(ToolStripMenuTracker_AppFocusChange);

            base.Show();

            ToolStripManager.SetActiveToolStrip(this, ToolStripManager.ActivatedByKeyboard);

            this.OnOpened(EventArgs.Empty);
        }
        private void ShowInternal(Control control, Point screenPosition, ToolStripDropDownDirection direction)
        {
            this.PerformLayout();

            Point show_point = CalculateShowPoint(screenPosition, direction, Size);

            if (this.Location != show_point)
            {
                this.Location = show_point;
            }

            // Prevents recursion
            if (Visible)
            {
                return;
            }

            SetSourceControl(control);

            CancelEventArgs e = new CancelEventArgs();

            this.OnOpening(e);

            if (e.Cancel)
            {
                return;
            }

            // The tracker lets us know when the form is clicked or loses focus
            ToolStripManager.AppClicked     += new EventHandler(ToolStripMenuTracker_AppClicked);
            ToolStripManager.AppFocusChange += new EventHandler(ToolStripMenuTracker_AppFocusChange);

            bool useNativeMenu = true;

            foreach (var item in this.Items)
            {
                useNativeMenu &= item is ToolStripMenuItem || item is ToolStripSeparator;
            }

            // Prevent closing native menus by the Application object - it would be too early, in MouseDown.
            // Native menus will close automatically, *after MouseUp*. This way, we can handle both
            // ways of selecting the item: mouse_down-move-mouse_up and click-move-click.
            ToolStripManager.DismissingHandledNatively = useNativeMenu;

#if XAMARINMAC
            if (useNativeMenu)
            {
                currentMenu = ToNSMenu();
                ((MonoMenuDelegate)currentMenu.Delegate).BeforePopup();
                show_point = CalculateShowPoint(screenPosition, direction, new Size((int)currentMenu.Size.Width, (int)currentMenu.Size.Height));
                PostMouseUp(control, show_point);
                NSApplication.SharedApplication.BeginInvokeOnMainThread(delegate {
                    if (control != null)
                    {
                        var winPosition = control.PointToClient(show_point);
                        currentMenu.PopUpMenu(null, new CGPoint(winPosition.X, winPosition.Y), control.Handle.ToNSView());
                    }
                    else
                    {
                        Size displaySize;
                        XplatUI.GetDisplaySize(out displaySize);
                        currentMenu.PopUpMenu(null, new CGPoint(show_point.X, displaySize.Height - show_point.Y), null);
                    }
                });
            }
#endif

            base.Show();

            ToolStripManager.SetActiveToolStrip(this, ToolStripManager.ActivatedByKeyboard);

            // Called from NSMenuDelegate for native menus
            if (!useNativeMenu)
            {
                this.OnOpened(EventArgs.Empty);
            }
        }