在我的应用程序中,我允许用户通过使用.按住右箭头键ProcessCmdKey
来滚动电影。现在我想让用户能够在需要时增加滚动速度。理想情况下,用户应该能够按住右箭头键,然后当他决定增加速度时,他应该在不释放右箭头键的情况下,同时按住 Shift 键,当他决定回到正常速度时,他应该简单地释放Shift 键。因此,滚动速度的差异应仅从应添加或删除的Shift 键修饰符到右箭头键压力中给出。
我尝试了这样的代码,但没有成功(在这个测试示例中,我的表单中有一个简单的标签):
int count = 0;
bool keyRightDown = false;
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Right)
{
keyRightDown = true;
count++;
label.Text = "count = " + count.ToString();
return true;
}
if (keyData == (Keys.Shift | Keys.ShiftKey) && keyRightDown)
{
count += 10;
label.Text = "count = " + count.ToString();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
protected override bool ProcessKeyMessage(ref Message m)
{
if ((Keys)m.WParam == Keys.Right)
{
if (m.Msg == 0x101) // KEYUP
{
keyDown = false;
return true;
}
}
return base.ProcessKeyMessage(ref m);
}
当用户将Shift 键添加到右箭头时,keyData
不包含(Keys.Shift | Keys.Right)
我所期望的但(Keys.Shift | Keys.ShiftKey)
. 但是这个问题仍然可以通过 boolean 来解决keyRightDown
。主要问题是,当用户通过此时仅按下右箭头来释放Shift 键时,不会触发任何其他调用。我怎样才能实现我的目标?ProcessCmdKey
ProcessKeyMessage