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