所以我正在创建一个表单,我希望左右键只对应于我在表单上的numericUpDown框。所以我写的代码如下:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Right)
{
numericUpDown1.Value = Convert.ToDecimal(numericUpDown1.Value + 1);
}
if (keyData == Keys.Left)
{
try
{
numericUpDown1.Value = Convert.ToDecimal(numericUpDown1.Value - 1);
}
catch { }
}
return base.ProcessCmdKey(ref msg, keyData);
}
然而,如果它是当前所选视图的内容,它似乎仍然执行在表单上的不同对象之间移动的默认操作。如何停止默认操作?
答案 0 :(得分:2)
当您不希望执行默认操作时,您需要返回true。
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Right)
{
numericUpDown1.Value = Convert.ToDecimal(numericUpDown1.Value + 1);
return true;
}
if (keyData == Keys.Left)
{
try
{
numericUpDown1.Value = Convert.ToDecimal(numericUpDown1.Value - 1);
return true;
}
catch { }
}
}
答案 1 :(得分:1)
也许你应该返回true表示你已经处理了关键笔划消息,这样就没有其他控件可以获得它了。
答案 2 :(得分:0)
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Right){
numericUpDown1.Value = Convert.ToDecimal(numericUpDown1.Value + 1);
return true;
}
else if (keyData == Keys.Left){
try {
numericUpDown1.Value = Convert.ToDecimal(numericUpDown1.Value - 1);
}
catch { }
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
注意:看起来你没有发布你运行的代码?我强烈建议您发布您的实际代码,但由于缺少return
,您的代码甚至无法编译。而且您的代码缺少处理其他密钥所需的return base.ProcessCmdKey(ref msg, keyData);
。
答案 3 :(得分:0)
您可以添加事件处理程序并执行此操作:
private void keypressed(Object o, KeyPressEventArgs e)
{
if (e.KeyCode == Keys.Right || e.KeyCode == Keys.Left)
{
e.Handled = true; //this line will do the trick
//add the rest of your code here.
}
}