C#文本框禁用快捷方式
我在我的windows窗体应用程序中使用了一个文本框,我需要禁用快捷键CTRL+i和CTRL+H。我尝试了许多通过google找到的不同解决方案,但都不起作用 我已经在我的应用程序中使用了CTRL+I作为自定义快捷键,我不希望通过此命令在文本框中插入tabstop。无论出于何种原因,CTRL+H的作用类似于按delete键 如果我在控件的属性中将“快捷键已启用”设置为false,则CTRL+i和CTRL+H仍在工作。然后禁用CTRL+C或CTRL+V。如果我将“快捷方式已启用”设置为false,我希望所有快捷方式都已关闭 我尝试了在某处找到的以下代码,但它也不能阻止CTRL+I或CTRL+HC#文本框禁用快捷方式,c#,textbox,shortcut,C#,Textbox,Shortcut,我在我的windows窗体应用程序中使用了一个文本框,我需要禁用快捷键CTRL+i和CTRL+H。我尝试了许多通过google找到的不同解决方案,但都不起作用 我已经在我的应用程序中使用了CTRL+I作为自定义快捷键,我不希望通过此命令在文本框中插入tabstop。无论出于何种原因,CTRL+H的作用类似于按delete键 如果我在控件的属性中将“快捷键已启用”设置为false,则CTRL+i和CTRL+H仍在工作。然后禁用CTRL+C或CTRL+V。如果我将“快捷方式已启用”设置为false,
尝试重写
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);
}
使用shortcutsenabled属性,以便在从鼠标和键盘排除快捷键时更具选择性
TextBox.ShortcutsEnabled = false;
参考文献
使用ShortcutsEnabled属性可以启用或禁用以下快捷键组合和控件的快捷菜单:
CTRL+Z
CTRL+E
CTRL+C
CTRL+Y
CTRL+X
CTRL+BACKSPACE
CTRL+V
CTRL+DELETE
CTRL+A
SHIFT+DELETE
CTRL+L
移位+插入
CTRL+R尝试添加
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;
}
}
}
这可能会有所帮助。我有一个ToolStripMenu,其中有几个项目,其中有ShorcutKey。我想在任何文本框都有焦点时停止它们的功能。这对我有用
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);
}
我已经有了一个CTRL+I的覆盖,它会触发一个函数,从axAXVLCplugin抓取到当前位置。但当我按下CTRL+i键时,我会在文本框中看到一个标签和当前位置。CTRL+H和CTRL+I仍在使用私有void主窗口加载(对象发送方,EventArgs{textBoxComment.ShortcutsEnabled=false;}MSDN没有解释如何“使用ShortcutsEnabled属性启用或禁用”某些组合键,它只是指使用boolean属性全局打开或关闭所有快捷键。我能看到的消除不需要的快捷键组合的唯一方法是在按键处理程序中专门使用它们(除非我遗漏了什么)。@Jones我测试了它,你说
Ctrl+H
看起来像是一个Backspace
,当我测试时它确实是这样的,(有点支持),但是,当使用我发布的代码时,它实际上已被禁用。我想您可能需要发布更多代码。我只是尝试使用一个空白表单。因此,我在函数public Form1(){InitializeComponent()}下面添加了一个文本框我已经粘贴了你的代码。然后,CTRL+i被禁用,但CTRL+H仍在工作。我无法添加更多代码,因为我是StackOverflow的新手,目前只有评论权。但这并不能解释为什么在我的其他应用程序中仍然可以使用CTRL+i。可能是因为我使用CTRL+i的覆盖来触发另一个函数,因为其中,CTRL+I在文本框中仍然可用?@Jones你知道如何在C#
中注册事件处理程序吗?我怀疑你还没有为按键事件注册处理程序。正如我所说,它对我有效,你可以尝试一个新项目并查看它的运行情况。最后一个问题,你如何知道CTRL+H仍然处于启用状态?是<代码>字符
仍然向后删除(就像按Ctrl+H
时使用Backspace
一样)?
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);
}