快捷方式显示在多个菜单中

时间:2011-08-03 12:35:32

标签: c# winforms .net-4.0

我在正在创建的自定义TextBox中使用UserControl。似乎默认的contextmenu没有显示Cut,Copy,Paste的快捷方式。这很好,只要他们正在工作。

但使用Form的{​​{1}} UserControl包含这些默认快捷方式的MenuStrip。但是现在已将快捷方式分配给MenuStrip,剪切,复制,粘贴命令不再起作用。

如何在表单中的多个位置使用快捷方式?传递像Cut这样的全局命令的最佳方法是什么,并将其更深入地发布到我的UserControl?是否可以将快捷方式添加到文本框的默认上下文菜单中?

2 个答案:

答案 0 :(得分:0)

你必须为文本框的属性启用相同的属性,它才会开始响应。

只需验证myTextBox.ShortcutsEnabled = TRUE;

答案 1 :(得分:0)

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()方法执行相同的操作。您可以通过选择启用这些菜单/工具栏项来进一步增强UI,方法是订阅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();
    }