Как отключить навигацию по WinForm со стрелками на С#?
Мне нужно отключить изменение фокуса со стрелками по форме. Есть ли простой способ, как это сделать?
Спасибо
Ответы
Ответ 1
Что-то по строкам:
private void Form1_Load(object sender, EventArgs e)
{
foreach (Control control in this.Controls)
{
control.PreviewKeyDown += new PreviewKeyDownEventHandler(control_PreviewKeyDown);
}
}
void control_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
{
e.IsInputKey = true;
}
}
Ответ 2
Я закончил с приведенным ниже кодом, который устанавливает функцию КАЖДОМУ управление по форме:
(код основан на значении от andynormancx)
private void Form1_Load(object sender, EventArgs e)
{
SetFeatureToAllControls(this.Controls);
}
private void SetFeatureToAllControls(Control.ControlCollection cc)
{
if (cc != null)
{
foreach (Control control in cc)
{
control.PreviewKeyDown += new PreviewKeyDownEventHandler(control_PreviewKeyDown);
SetFeatureToAllControls(control.Controls);
}
}
}
void control_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
{
e.IsInputKey = true;
}
}
Ответ 3
Вы должны установить KeyPreview
значение true в форме. Обработайте событие KeyDown/KeyUp/KeyPress
и установите для e.Handled
в обработчике событий значение true для ключей, которые вы хотите игнорировать.
Ответ 4
Я попробовал этот aproach, где форма обрабатывает событие предварительного просмотра один раз. Он генерирует меньше кода, чем другие.
Просто добавьте этот метод в событие PreviewKeyDown
вашей формы и установите для свойства KeyPreview
значение true
.
private void form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Up:
case Keys.Down:
case Keys.Left:
case Keys.Right:
e.IsInputKey = true;
break;
default:
break;
}
}