我正在研究一个CustomControl
,我想ModifierKeys
在这个控件中注册。我已经将这个控件添加到其中KeyPerview
。True
Form
现在我有一个Boolean
命名_ctrl
,我希望这个布尔值是true
在Control
按住键时,它应该是false
在Control
释放键时。
我试图用下面的 conde 来实现这一点,CustomControl
但没有成功!
private bool _ctrl = false;
private void MyCustomControl_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Control)
{
_ctrl = true;
}
}
private void MyCustomControl_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Control)
{
_ctrl = false;
}
}
任何提示/解决方案都将得到应用!
更新
好的,我决定在表单本身中执行按键向下和向上事件:
private void MainForm_KeyDown(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.Control)
{
projectBrowser.ControlKeyIsDown = true; //bool in MyCustomControl
MessageBox.Show("CTRL is PRESSED");
}
}
private void MainForm_KeyUp(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.Control)
{
projectBrowser.ControlKeyIsDown = false; //bool in MyCustomControl
MessageBox.Show("CTRL is DEPRESSED");
}
}
现在,KeyDown 事件检测到控制键并显示消息框。但是该KeyUp
事件不起作用,并且不显示消息框。有什么问题?
KeyUp
如果我像这样更改事件,似乎键被检测到:
private void MainForm_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.LControlKey || e.KeyCode == Keys.RControlKey || e.KeyCode == Keys.ControlKey || e.KeyCode == Keys.Control)
{
projectBrowser.ControlKeyIsDown = false;
e.Handled = true;
}
}