示例#1
0
        public static ContextMenuStrip Create <TEntry>(TextBoxBase tb, TEntry[] ignoreList, CodeMenuItem[] extraItems) where TEntry : CodeMenuEntry
        {
            ContextMenuStrip cms = new ContextMenuStrip
            {
                Font            = new Font("Lucida Console", 8),
                AutoClose       = false,
                Opacity         = 0.9,
                ShowImageMargin = false
            };

            List <CodeMenuItem> items = new List <CodeMenuItem>();

            if (extraItems != null)
            {
                items.AddRange(extraItems);
            }

            IEnumerable <CodeMenuItem> variables = Helpers.GetValueFields <TEntry>().Where(x => !ignoreList.Contains(x)).
                                                   Select(x => new CodeMenuItem(x.ToPrefixString(), x.Description, x.Category));

            items.AddRange(variables);

            foreach (CodeMenuItem item in items)
            {
                ToolStripMenuItem tsmi = new ToolStripMenuItem {
                    Text = $"{item.Name} - {item.Description}", Tag = item.Name
                };
                tsmi.Click += (sender, e) =>
                {
                    string text = ((ToolStripMenuItem)sender).Tag.ToString();
                    tb.AppendTextToSelection(text);
                };

                if (string.IsNullOrWhiteSpace(item.Category))
                {
                    cms.Items.Add(tsmi);
                }
                else
                {
                    ToolStripMenuItem tsmiParent;
                    int index = cms.Items.IndexOfKey(item.Category);
                    if (index < 0)
                    {
                        tsmiParent = new ToolStripMenuItem {
                            Text = item.Category, Tag = item.Category, Name = item.Category
                        };
                        tsmiParent.HideImageMargin();
                        cms.Items.Add(tsmiParent);
                    }
                    else
                    {
                        tsmiParent = cms.Items[index] as ToolStripMenuItem;
                    }
                    tsmiParent.DropDownItems.Add(tsmi);
                }
            }

            cms.Items.Add(new ToolStripSeparator());

            ToolStripMenuItem tsmiClose = new ToolStripMenuItem(Resources.CodeMenu_Create_Close);

            tsmiClose.Click += (sender, e) => cms.Close();
            cms.Items.Add(tsmiClose);

            tb.MouseDown += (sender, e) =>
            {
                if (cms.Items.Count > 0)
                {
                    cms.Show(tb, new Point(tb.Width + 1, 0));
                }
            };

            tb.GotFocus += (sender, e) =>
            {
                if (cms.Items.Count > 0)
                {
                    cms.Show(tb, new Point(tb.Width + 1, 0));
                }
            };

            tb.LostFocus += (sender, e) =>
            {
                if (cms.Visible)
                {
                    cms.Close();
                }
            };

            tb.KeyDown += (sender, e) =>
            {
                if ((e.KeyCode == Keys.Enter || e.KeyCode == Keys.Escape) && cms.Visible)
                {
                    cms.Close();
                    e.SuppressKeyPress = true;
                }
            };

            tb.Disposed += (sender, e) => cms.Dispose();

            return(cms);
        }
示例#2
0
        public CodeMenu(TextBoxBase tbb, CodeMenuItem[] items)
        {
            textBoxBase = tbb;

            Font            = new Font("Lucida Console", 8);
            AutoClose       = textBoxBase == null;
            ShowImageMargin = false;

            foreach (CodeMenuItem item in items)
            {
                ToolStripMenuItem tsmi = new ToolStripMenuItem {
                    Text = $"{item.Name} - {item.Description}", Tag = item.Name
                };

                tsmi.MouseUp += (sender, e) =>
                {
                    if (textBoxBase != null && e.Button == MouseButtons.Left)
                    {
                        string text = ((ToolStripMenuItem)sender).Tag.ToString();
                        textBoxBase.AppendTextToSelection(text);
                    }
                    else
                    {
                        Close();
                    }
                };

                if (string.IsNullOrWhiteSpace(item.Category))
                {
                    Items.Add(tsmi);
                }
                else
                {
                    ToolStripMenuItem tsmiParent;
                    int index = Items.IndexOfKey(item.Category);
                    if (index < 0)
                    {
                        tsmiParent = new ToolStripMenuItem {
                            Text = item.Category, Tag = item.Category, Name = item.Category
                        };
                        tsmiParent.HideImageMargin();
                        Items.Add(tsmiParent);
                    }
                    else
                    {
                        tsmiParent = Items[index] as ToolStripMenuItem;
                    }
                    tsmiParent.DropDownItems.Add(tsmi);
                }
            }

            Items.Add(new ToolStripSeparator());

            ToolStripMenuItem tsmiClose = new ToolStripMenuItem(Resources.CodeMenu_Create_Close);

            tsmiClose.Click += (sender, e) => Close();
            Items.Add(tsmiClose);

            if (ShareXResources.UseCustomTheme)
            {
                ShareXResources.ApplyCustomThemeToContextMenuStrip(this);
            }

            if (textBoxBase != null)
            {
                textBoxBase.MouseDown += (sender, e) =>
                {
                    if (Items.Count > 0)
                    {
                        Show(textBoxBase, MenuLocation);
                    }
                };

                textBoxBase.GotFocus += (sender, e) =>
                {
                    if (Items.Count > 0)
                    {
                        Show(textBoxBase, MenuLocation);
                    }
                };

                textBoxBase.LostFocus += (sender, e) =>
                {
                    if (Visible)
                    {
                        Close();
                    }
                };

                textBoxBase.KeyDown += (sender, e) =>
                {
                    if ((e.KeyCode == Keys.Enter || e.KeyCode == Keys.Escape) && Visible)
                    {
                        Close();
                        e.SuppressKeyPress = true;
                    }
                };

                textBoxBase.Disposed += (sender, e) => Dispose();
            }
        }
示例#3
0
文件: CodeMenu.cs 项目: zz110/ShareX
        public static ContextMenuStrip Create(TextBoxBase tb, CodeMenuItem[] items)
        {
            ContextMenuStrip cms = new ContextMenuStrip
            {
                Font            = new Font("Lucida Console", 8),
                AutoClose       = tb == null,
                Opacity         = 0.9,
                ShowImageMargin = false
            };

            foreach (CodeMenuItem item in items)
            {
                ToolStripMenuItem tsmi = new ToolStripMenuItem {
                    Text = $"{item.Name} - {item.Description}", Tag = item.Name
                };
                tsmi.MouseUp += (sender, e) =>
                {
                    if (tb != null && e.Button == MouseButtons.Left)
                    {
                        string text = ((ToolStripMenuItem)sender).Tag.ToString();
                        tb.AppendTextToSelection(text);
                    }
                    else
                    {
                        cms.Close();
                    }
                };

                if (string.IsNullOrWhiteSpace(item.Category))
                {
                    cms.Items.Add(tsmi);
                }
                else
                {
                    ToolStripMenuItem tsmiParent;
                    int index = cms.Items.IndexOfKey(item.Category);
                    if (index < 0)
                    {
                        tsmiParent = new ToolStripMenuItem {
                            Text = item.Category, Tag = item.Category, Name = item.Category
                        };
                        tsmiParent.HideImageMargin();
                        cms.Items.Add(tsmiParent);
                    }
                    else
                    {
                        tsmiParent = cms.Items[index] as ToolStripMenuItem;
                    }
                    tsmiParent.DropDownItems.Add(tsmi);
                }
            }

            cms.Items.Add(new ToolStripSeparator());

            ToolStripMenuItem tsmiClose = new ToolStripMenuItem(Resources.CodeMenu_Create_Close);

            tsmiClose.Click += (sender, e) => cms.Close();
            cms.Items.Add(tsmiClose);

            if (tb != null)
            {
                tb.MouseDown += (sender, e) =>
                {
                    if (cms.Items.Count > 0)
                    {
                        cms.Show(tb, new Point(tb.Width + 1, 0));
                    }
                };

                tb.GotFocus += (sender, e) =>
                {
                    if (cms.Items.Count > 0)
                    {
                        cms.Show(tb, new Point(tb.Width + 1, 0));
                    }
                };

                tb.LostFocus += (sender, e) =>
                {
                    if (cms.Visible)
                    {
                        cms.Close();
                    }
                };

                tb.KeyDown += (sender, e) =>
                {
                    if ((e.KeyCode == Keys.Enter || e.KeyCode == Keys.Escape) && cms.Visible)
                    {
                        cms.Close();
                        e.SuppressKeyPress = true;
                    }
                };

                tb.Disposed += (sender, e) => cms.Dispose();
            }

            return(cms);
        }