在 KeyDown 事件中检测星号键
Detecting the Asterisk Key on KeyDown Event
首先我看到了下面的回答,它并不能完全满足我的需要。
我编写了一个具有基本智能感知功能的编辑器(有关见解,请参阅 A New and Full Implementation of Generic Intellisense)。我已经使用此编辑器实现了一些基本的 SQL 服务器完成,但是当我键入 *
键时,我不断弹出智能感知。我想阻止这种情况。目前我在做以下事情:
private void TextArea_KeyDown(object sender, KeyEventArgs e)
{
if (!e.Control && e.KeyCode == Keys.Space || e.Shift)
return;
IntellisenseEngine.DisplayCompletion(this, (char)e.KeyValue);
}
我最近重新开发了我的控件,我想基于现有的限制来确定何时以及何时不显示洞察力 window。我想要的一个子集是:
+------------------------------+-------------------+
¦ ¦ Modifier ¦ Keys ¦ Show Completion ¦
¦---+------------+-------------¦-------------------¦
¦ 1 ¦ Shift ¦ None ¦ No ¦
¦ 2 ¦ Shift ¦ * (see note)¦ No ¦
¦ 3 ¦ None ¦ Space ¦ No ¦
¦ 4 ¦ Any ¦ Arrow Keys ¦ No ¦
+------------------------------+-------------------+
等人。注意,“*”e.KeyCode
是 D8
,这显然不是键盘不变的并且依赖于语言环境,因此是不够的。
本质上,我希望我的 SQL 智能感知像 SQL Server Management Studio 的 (SQLMS) 一样工作,我的问题是:
如何独立于键盘区域设置检测星号字符键被按下。
我应该施加哪些其他关键条件来抑制智能感知 window 的弹出窗口并使其像 SQLMS 一样?
我试过使用
private void TextArea_KeyPress(object sender, KeyPressEventArgs e)
{
if ((Control.ModifierKeys & Keys.Control) != Keys.Control && <Detect Space Bar> ||
(Control.ModifierKeys & Keys.Shift) == Keys.Shift && e.KeyChar == '*')
return;
IntellisenseEngine.DisplayCompletion(this, (char)e.KeyValue);
}
但后来我遇到了检测 space 条的问题。
感谢您的宝贵时间。
检查修改后的代码。希望有用
private void TextArea_KeyPress(object sender, KeyPressEventArgs e)
{
if ((Control.ModifierKeys & Keys.Contro) != Keys.Control && e.KeyChar == ' ' ||
(Control.ModifierKeys & Keys.Shift) == Keys.Shift && e.KeyChar == '*')
return;
IntellisenseEngine.DisplayCompletion(this, (char)e.KeyValue);
}
这对我有用:
private void Principal_KeyDown(object sender, KeyEventArgs e)
{
// if no special keys detected (May, Ctrl, etc)
char keyChar = Convert.ToChar(e.KeyValue);
if (keyChar == '\u0010')
{
// your code
}
}
首先我看到了下面的回答,它并不能完全满足我的需要。
我编写了一个具有基本智能感知功能的编辑器(有关见解,请参阅 A New and Full Implementation of Generic Intellisense)。我已经使用此编辑器实现了一些基本的 SQL 服务器完成,但是当我键入 *
键时,我不断弹出智能感知。我想阻止这种情况。目前我在做以下事情:
private void TextArea_KeyDown(object sender, KeyEventArgs e)
{
if (!e.Control && e.KeyCode == Keys.Space || e.Shift)
return;
IntellisenseEngine.DisplayCompletion(this, (char)e.KeyValue);
}
我最近重新开发了我的控件,我想基于现有的限制来确定何时以及何时不显示洞察力 window。我想要的一个子集是:
+------------------------------+-------------------+
¦ ¦ Modifier ¦ Keys ¦ Show Completion ¦
¦---+------------+-------------¦-------------------¦
¦ 1 ¦ Shift ¦ None ¦ No ¦
¦ 2 ¦ Shift ¦ * (see note)¦ No ¦
¦ 3 ¦ None ¦ Space ¦ No ¦
¦ 4 ¦ Any ¦ Arrow Keys ¦ No ¦
+------------------------------+-------------------+
等人。注意,“*”e.KeyCode
是 D8
,这显然不是键盘不变的并且依赖于语言环境,因此是不够的。
本质上,我希望我的 SQL 智能感知像 SQL Server Management Studio 的 (SQLMS) 一样工作,我的问题是:
如何独立于键盘区域设置检测星号字符键被按下。
我应该施加哪些其他关键条件来抑制智能感知 window 的弹出窗口并使其像 SQLMS 一样?
我试过使用
private void TextArea_KeyPress(object sender, KeyPressEventArgs e)
{
if ((Control.ModifierKeys & Keys.Control) != Keys.Control && <Detect Space Bar> ||
(Control.ModifierKeys & Keys.Shift) == Keys.Shift && e.KeyChar == '*')
return;
IntellisenseEngine.DisplayCompletion(this, (char)e.KeyValue);
}
但后来我遇到了检测 space 条的问题。
感谢您的宝贵时间。
检查修改后的代码。希望有用
private void TextArea_KeyPress(object sender, KeyPressEventArgs e)
{
if ((Control.ModifierKeys & Keys.Contro) != Keys.Control && e.KeyChar == ' ' ||
(Control.ModifierKeys & Keys.Shift) == Keys.Shift && e.KeyChar == '*')
return;
IntellisenseEngine.DisplayCompletion(this, (char)e.KeyValue);
}
这对我有用:
private void Principal_KeyDown(object sender, KeyEventArgs e)
{
// if no special keys detected (May, Ctrl, etc)
char keyChar = Convert.ToChar(e.KeyValue);
if (keyChar == '\u0010')
{
// your code
}
}