Как изменить (и позже восстановить) контекстное меню по умолчанию в текстовом поле - PullRequest
2 голосов
/ 12 августа 2010

Я хотел изменить контекстное меню текстового поля по умолчанию, поэтому я создал свое собственное меню и назначил его таким образом

texbox.ContextMenu = myContextMenu

Однако я не знаю, как восстановить меню текстового поля по умолчанию (во время выполнения).Мне нужно, чтобы myContextMenu отображался только тогда, когда я щелкаю текстовое поле правой кнопкой мыши (удерживая кнопку «Управление»).В других случаях мне нужно контекстное меню текстового поля по умолчанию, чтобы показать.Возможно ли это?

Ответы [ 3 ]

2 голосов
/ 10 января 2011

Вот пример, приведенный Microsoft:

http://msdn.microsoft.com/en-us/library/ms750420.aspx

Для справки, вот способ сделать это с помощью WinForms:

public partial class TextBoxContextMenuDemo : Form
{
    ContextMenu mnuContextDefault;
    ContextMenu mnuContextAlt;

    MenuItem mnuItmAltMenuTest;

    public TextBoxContextMenuDemo()
    {
        InitializeComponent();
        InitializeAltContextMenu();
    }

    private void InitializeAltContextMenu()
    {
        mnuContextDefault = new ContextMenu();
        mnuContextDefault = this.TextBox1.ContextMenu;

        mnuItmAltMenuTest = new MenuItem();
        mnuItmAltMenuTest.Index = -1;
        mnuItmAltMenuTest.Text = "Test Menu Item";
        mnuItmAltMenuTest.Click += new System.EventHandler(this.mnuItmAltMenuTest_Click);

        mnuContextAlt = new ContextMenu();
        mnuContextAlt.MenuItems.Add(mnuItmAltMenuTest);
    }

    private void TextBox1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            if ((Control.ModifierKeys == Keys.Control))
            {
                this.TextBox1.ContextMenu = mnuContextAlt;
                TextBox1.ContextMenu.Show(TextBox1, new Point(e.X, e.Y));
            }
            else
            {
                this.TextBox1.ContextMenu = mnuContextDefault;
            }
        }
    }

    private void mnuItmAltMenuTest_Click(object sender, System.EventArgs e)
    {
        MessageBox.Show("You clicked the alternate test menu item!");
    }
}

НТН!

0 голосов
/ 12 марта 2013

Вы можете просто установить для ContextMenu-свойства значение null. Также может помочь событие OnContextMenuOpening.

0 голосов
/ 13 августа 2010

На самом деле это будет сложнее, чем кажется на первый взгляд.Я считаю, что контекстное меню по умолчанию является частью фактического шаблона элемента управления.

Самый простой подход, если вы хотите только вырезать / копировать / вставить, состоит в создании второго ContextMenu, реализующего эти параметры.Если вы это сделаете, вы можете использовать встроенные ApplicationCommands для реализации не только функциональности, но и для автоматической локализации этого ContextMenu.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...