Мне нужно отключить изменение фокуса со стрелками по форме. Есть ли простой способ, как это сделать?
Спасибо
Мне нужно отключить изменение фокуса со стрелками по форме. Есть ли простой способ, как это сделать?
Спасибо
Что-то по строкам:
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;
}
}
Я закончил с приведенным ниже кодом, который устанавливает функцию КАЖДОМУ управление по форме:
(код основан на значении от 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;
}
}
Вы должны установить KeyPreview
значение true в форме. Обработайте событие KeyDown/KeyUp/KeyPress
и установите для e.Handled
в обработчике событий значение true для ключей, которые вы хотите игнорировать.
Я попробовал этот 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;
}
}