好的,所以我正在制作一个Tic-Tac-Toe游戏来帮助我学习C#。 我正在尝试为它添加一些功能,所以我希望人们能够在计算机上使用NumPad来模拟单击按钮。
这是我所拥有的,但是当我使用NumPad时,按钮不会单击。 你们中任何人都可以找到原因吗?
//===============================
// start NumPad Simulate Clicks
// NumPad MyButtons
// 7 8 9 1 2 3
// 4 5 6 4 5 6
// 1 2 3 7 8 9
//===============================
public void myControl_NumPad7(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.NumPad7)
{
button1_Click(null, null);
}
}
public void myControl_NumPad8(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.NumPad8)
{
button2_Click(null, null);
}
}
public void myControl_NumPad9(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.NumPad9)
{
button3_Click(null, null);
}
}
public void myControl_NumPad4(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.NumPad4)
{
button4_Click(null, null);
}
}
public void myControl_NumPad5(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.NumPad5)
{
button5_Click(null, null);
}
}
public void myControl_NumPad6(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.NumPad6)
{
button6_Click(null, null);
}
}
public void myControl_NumPad1(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.NumPad1)
{
button7_Click(null, null);
}
}
public void myControl_NumPad2(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.NumPad2)
{
button8_Click(null, null);
}
}
public void myControl_NumPad3(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.NumPad3)
{
button9_Click(null, null);
}
}
答案 0 :(得分:5)
修改强>
注意到我必须更清楚我的意思......
根据您发布的代码,我怀疑您有9个控件,您已将关键事件添加到。这些控件只有在关注时才会收到关键事件。
要全局处理表单的密钥,您必须将Form.KeyPreview
设置为true
。另外,我不会按照你的方式处理密钥,而是添加一个Form.KeyDown
事件并编写如下内容:
switch (e.KeyCode)
{
case Keys.NumPad9:
e.Handled = true;
button3.PerformClick();
break;
case Keys.NumPad8:
e.Handled = true;
button2.PerformClick();
break;
// And so on
}
这将处理表单中的NumPad-Keys - 然后您可以删除您在问题中发布的所有事件处理程序。
要以编程方式“单击”按钮,您应该使用Button.PerformClick()
方法,因为可能会向click事件添加多个事件处理程序,否则将不会调用该事件处理程序。
编辑2
switch
- 语句的语法无效。当然,每个“案例”都必须以case
关键字开头......现在它应该有效。
答案 1 :(得分:1)
您需要使用button1.PerformClick();
为每个按钮正确调用事件,这里是info。