Сделать ярлыки появляются в нескольких меню - PullRequest
0 голосов
/ 03 августа 2011

Я использую TextBox в пользовательском UserControl, который я создаю.Кажется, что контекстное меню по умолчанию не показывает ярлыки для Вырезать, Копировать, Вставить.Это нормально, если они только работают.

Но мой Form, использующий UserControl, имеет MenuStrip, который также содержит эти ярлыки по умолчанию.Но команды Вырезать, Копировать, Вставить больше не работают, теперь, когда ярлыки назначены на MenuStrip.

Как я могу использовать ярлыки на нескольких позициях в моих формах?Каков наилучший способ передать глобальную команду, такую ​​как Cut, и отправить ее глубже в мой UserControl?И можно ли добавить ярлыки в контекстное меню по умолчанию для текстового поля?

Ответы [ 2 ]

0 голосов
/ 03 августа 2011

Элемент MenuStrip или ToolStrip не изменяет фокус при нажатии или нажатии его сочетания клавиш. Что является билетом для реализации этой функциональности, ActiveControl формы сообщает вам, какой элемент управления находится в фокусе. Вам просто нужно проверить, если это TextBox. Как это:

    private void copyToolStripMenuItem_Click(object sender, EventArgs e) {
        var box = this.ActiveControl as TextBoxBase;
        if (box != null) box.Copy();
    }

Сделайте то же самое для методов Paste () и Cut (). Вы можете дополнительно улучшить пользовательский интерфейс, выборочно включив эти элементы меню / панели инструментов, подписавшись на событие Application.Idle и проверив, является ли ActiveControl текстовым полем и содержит ли текстовое поле или буфер обмена какой-либо текст. Как это:

    public Form1() {
        InitializeComponent();
        Application.Idle += Application_Idle;
    }
    protected override void OnFormClosed(FormClosedEventArgs e) {
        Application.Idle -= Application_Idle;
        base.OnFormClosed(e);
    }

    void Application_Idle(object sender, EventArgs e) {
        var box = this.ActiveControl as TextBoxBase;
        copyToolStripMenuItem.Enabled = box != null && box.Text.Length > 0;
        cutToolStripMenuItem.Enabled = copyToolStripMenuItem.Enabled;
        pasteToolStripMenuItem.Enabled = box != null && Clipboard.ContainsText();
    }
0 голосов
/ 03 августа 2011

Вы должны просто включить свойство textbox для того же самого, и оно начнет отвечать.

Просто убедитесь, что myTextBox.ShortcutsEnabled = TRUE;

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