我正在设计一款设备应用。 Compact Framework 2.0
我希望用户按F1导航到下一个屏幕,但它不起作用。
似乎无法找到解决方案。
有可能吗?
这就是我通常使用Keypress的方式:
这有效:
if (e.KeyChar == (char)Keys.M)
{
MessageBox.Show("M pressed");
e.Handled = true;
}
这不起作用:
if (e.KeyChar == (char)Keys.F1)
{
MessageBox.Show("F1 pressed");
e.Handled = true;
}
答案 0 :(得分:7)
参考This
您可以覆盖表单类的ProcessCmdKey
方法,并使用keyData == Keys.F1
检查F1是否被按下。以上链接示例如下。
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.F1)
{
MessageBox.Show("You pressed the F1 key");
return true; // indicate that you handled this keystroke
}
// Call the base class
return base.ProcessCmdKey(ref msg, keyData)
}
答案 1 :(得分:4)
试试这个
private void Form1_Load(object sender, EventArgs e)
{
this.KeyPreview = true;
this.KeyDown += new KeyEventHandler(Form1_KeyDown);
}
void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode.ToString() == "F1")
{
MessageBox.Show("F1 pressed");
}
}
答案 2 :(得分:2)
keychar无法“捕获”某些键(如f1,f2,箭头键,标签....),因为您需要使用键码:
if (e.KeyCode == Keys.F1)
{
// do stuff
}
keychar属性 - http://msdn.microsoft.com/en-us/library/system.windows.forms.keypresseventargs.keychar.aspx
答案 3 :(得分:0)
使用KeyDown
代替KeyPress
:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.F1)
{
// your code here
}
}
同时将KeyPreview
设为true