keydown 事件不会为某些组合敲击
keydown event does not stroke for some combination
我需要制作三个字母的快捷键组合(Ctrl+L+I)
我尝试了很多但没有运气。
我这样试过
private void MDIParent2HOME_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.Keycode==Keys.L && e.KeyCode == Keys.I)
{//login
Form1 chilform = new Form1();
chilform.MdiParent = this;
chilform.Show();
}
}
但这没有用。
然后我更改了我的组合键 (ctrl+ALt+L) 并以同样的方式进行了尝试
private void MDIParent2HOME_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.Alt && e.KeyCode == Keys.L)
{//login
{
Form1 chilform = new Form1();
chilform.MdiParent = this;
chilform.Show();
}
}
}
我想知道它是否完美。我无法理解任何人知道 KeyDown 的这种行为的原因 event.Also 如果我可以用 (ctrl+L+I) 做同样的事情,请帮助我。谢谢
您正在检查 e.Keycode==Keys.L && e.KeyCode == Keys.I
。我认为 e.Keycode 只包含一个键的值,L
或 I
,但不能同时包含这两个键,所以你的检查总是会失败。
请注意,Alt
、Shift
和 Ctrl
是修饰符,其处理方式与其他键略有不同。
嗯...我认为我的解决方案有效
private bool IfSeen;
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (IfSeen)
{
if (keyData == (Keys.Control | Keys.I))
{
MessageBox.Show("You pressed Ctrl+L+I");
}
IfSeen= false;
return true;
}
if (keyData == (Keys.Control | Keys.L))
{
IfSeen= true;
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
我需要制作三个字母的快捷键组合(Ctrl+L+I) 我尝试了很多但没有运气。 我这样试过
private void MDIParent2HOME_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.Keycode==Keys.L && e.KeyCode == Keys.I)
{//login
Form1 chilform = new Form1();
chilform.MdiParent = this;
chilform.Show();
}
}
但这没有用。
然后我更改了我的组合键 (ctrl+ALt+L) 并以同样的方式进行了尝试
private void MDIParent2HOME_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.Alt && e.KeyCode == Keys.L)
{//login
{
Form1 chilform = new Form1();
chilform.MdiParent = this;
chilform.Show();
}
}
}
我想知道它是否完美。我无法理解任何人知道 KeyDown 的这种行为的原因 event.Also 如果我可以用 (ctrl+L+I) 做同样的事情,请帮助我。谢谢
您正在检查 e.Keycode==Keys.L && e.KeyCode == Keys.I
。我认为 e.Keycode 只包含一个键的值,L
或 I
,但不能同时包含这两个键,所以你的检查总是会失败。
请注意,Alt
、Shift
和 Ctrl
是修饰符,其处理方式与其他键略有不同。
嗯...我认为我的解决方案有效
private bool IfSeen;
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (IfSeen)
{
if (keyData == (Keys.Control | Keys.I))
{
MessageBox.Show("You pressed Ctrl+L+I");
}
IfSeen= false;
return true;
}
if (keyData == (Keys.Control | Keys.L))
{
IfSeen= true;
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}