C# 文本框禁用快捷方式
本文关键字:快捷方式 文本 | 更新日期: 2023-09-27 18:32:29
我在Windows表单应用程序中使用文本框,我需要禁用快捷方式CTRL + I和CTRL + H。我尝试了通过谷歌找到的许多不同解决方案,但它不起作用。
我已经在我的应用程序中使用 CTRL+I 作为自定义快捷方式,我不想在我的文本框中通过此命令插入制表符。无论出于何种原因,CTRL+H 就像按删除一样?
如果我在控件的属性中将"启用快捷方式"设置为 false,CTRL+I 和 CTRL+H 仍在工作。然后禁用 CTRL+C 或 CTRL+V。如果我将"启用快捷方式"设置为 false,我希望所有快捷方式都会关闭。
我尝试了我在某处找到的以下代码,但它也不会阻止 CTRL+I 或 CTRL+H
private void textBoxComment_KeyDown(object sender, KeyEventArgs e)
{
if ( e.Modifiers == Keys.Control )
{
switch(e.KeyCode)
{
case Keys.C:
case Keys.X:
case Keys.V:
case Keys.Z:
case Keys.I:
case Keys.H:
e.Handled = true;
break;
default:
break;
}
}
}
尝试覆盖ProcessCmdKey
函数:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if ((keyData & Keys.Control) > 0 && (keyData & Keys.KeyCode) == Keys.V)
{
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
这可能会有所帮助。我有ToolStripMenu,其中有很少的项目,其中有ShorcutKeys。我想在任何文本框具有焦点时停止它们的功能。这对我有用
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (ActiveControl is TextBox)
{
foreach (ToolStripMenuItem item in menu.DropDownItems)
{
if (item.ShortcutKeys == Keys.None) continue;
if (item.ShortcutKeys == keyData)
{
item.ShortcutKeys = Keys.None;
var ret = base.ProcessCmdKey(ref msg, keyData);
item.ShortcutKeys = keyData;
return ret;
}
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
使用 shortcutsenabled 属性,以便可以更有选择性地从鼠标和键盘中排除快捷方式。
TextBox.ShortcutsEnabled = false;
参考 msdn使用 ShortcutsEnabled 属性可以启用或禁用以下快捷键组合和控件的快捷菜单:按 Ctrl+Z按 CTRL+ECTRL+C按 Ctrl+Y按 Ctrl+Xctrl+退格键CTRL+V按 CTRL+删除按 CTRL+A移位+删除按 CTRL+L移位+插入CTRL+R
class="answers">尝试添加e.SuppressKeyPress = true
:
private void textBoxComment_KeyDown(object sender, KeyEventArgs e)
{
if ( e.Modifiers == Keys.Control )
{
switch(e.KeyCode)
{
case Keys.C:
case Keys.X:
case Keys.V:
case Keys.Z:
case Keys.I:
case Keys.H:
e.Handled = true;
e.SuppressKeyPress = true;
break;
default:
break;
}
}
}