我在正在创建的自定义TextBox
中使用UserControl
。似乎默认的contextmenu没有显示Cut,Copy,Paste的快捷方式。这很好,只要他们正在工作。
但使用Form
的{{1}} UserControl
包含这些默认快捷方式的MenuStrip
。但是现在已将快捷方式分配给MenuStrip
,剪切,复制,粘贴命令不再起作用。
如何在表单中的多个位置使用快捷方式?传递像Cut这样的全局命令的最佳方法是什么,并将其更深入地发布到我的UserControl
?是否可以将快捷方式添加到文本框的默认上下文菜单中?
答案 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();
}