如果MenuStrip设置了此快捷方式,则快捷键Ctrl + C Ctrl + V在文本框中不起作用

时间:2012-02-08 14:09:33

标签: c# winforms keyboard-shortcuts shortcuts menustrip

目标:使用复制和粘贴的Menustrip,用户将看到快捷键。

MenuStrip blocks TextBoxes

问题:如果您有一个MenuStrip并设置了ShortcutKeys,则菜单会“捕获”它们,但不会被文本框“捕获”。这意味着您不能在文本框中使用Ctrl + C / V - 只能通过右键单击。如果删除快捷方式,则文本框工作正常。

为什么?如果我不想将条目命名为“复制______ Ctrl + C”,那该解决方案是什么?

示例项目:http://www.file-upload.net/download-4098087/MenuBlocksSTRG.zip.html

MSDN已关闭ATM我发现此链接:

4 个答案:

答案 0 :(得分:2)

这应该适用于复制,你可以用同样的方式处理粘贴:

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == (Keys.Control | Keys.C) && textBox1.ContainsFocus)
        {
            Clipboard.SetText(textBox1.SelectedText);
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }

答案 1 :(得分:1)

在这些情况下,你可能需要自己处理事情。

简单示例:

private void copyToolStripMenuItem_Click(object sender, EventArgs e) {
  if (this.ActiveControl is TextBox) {
    Clipboard.SetText(((TextBox)this.ActiveControl).SelectedText);
  } else {
    // do your menu Edit-Copy code here
  }
}

private void pasteToolStripMenuItem_Click(object sender, EventArgs e) {
  if (this.ActiveControl is TextBox) {
    ((TextBox)this.ActiveControl).SelectedText = Clipboard.GetText();
  } else {
    // do you menu Edit-Paste code here
  }
}

答案 2 :(得分:1)

如果仍然重要,那么简单的解决方案可能是: 仅显示快捷键文本,如图像中所示。

Ctrl + V

在TextBox中将ShortcutsEnabled设置为true。这就是全部!

答案 3 :(得分:0)

你需要这样的东西吗?

ToolStripMenuItem Quit = new ToolStripMenuItem();
        Quit.Name = "quitToolStripMenuItem";
        Quit.Text = "&Quit";
        Quit.ShortcutKeys = Keys.Alt | Keys.F4;
        Quit.Click += new EventHandler(quitToolStripMenuItem_Click);