Нажатие клавиши для имитации нажатия кнопки в C#
Итак, я нахожусь в процессе создания игры в крестики-нолики, чтобы помочь мне выучить 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);
}
}
2 ответа
РЕДАКТИРОВАТЬ
Заметил, что мне нужно прояснить, что я имею в виду...
Из кода, который вы опубликовали, я подозреваю, что у вас есть 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-ключи в форме - вы можете удалить все обработчики событий, которые вы опубликовали в своем вопросе.
Чтобы программно "нажать" кнопку, вы должны использовать Button.PerformClick()
метод, так как к событию click может быть добавлено несколько обработчиков событий, которые не будут вызваны в противном случае.
РЕДАКТИРОВАТЬ 2
Синтаксис для switch
заявление было недействительным Конечно, каждый "случай" должен начинаться с case
Ключевое слово... Теперь это должно работать.
Вам нужно использовать button1.PerformClick();
для каждой кнопки, чтобы вызвать событие правильно, вот информация.