Единственная опасность объявления чего-либо в прямом направлении - это когда вы делаете предварительное объявление вне заголовка или в не разделяемом заголовке, и подпись прямого объявления отличается от фактической подписи того, что было объявлено заранее. Если вы сделаете это в extern "C"
, не будет никакого искажения имени для проверки подписи во время ссылки, поэтому вы можете столкнуться с неопределенным поведением, когда подписи не совпадают.
Для этого вы должны переопределить метод OnKeyUp в своей форме ...
protected override void OnKeyUp(KeyEventArgs e)
{
if (e.KeyCode == Keys.Right)
{
Control activeControl = this.ActiveControl;
if(activeControl == null)
{
activeControl = this;
}
this.SelectNextControl(activeControl, true, true, true, true);
e.Handled = true;
}
base.OnKeyUp(e);
}
Вы можете использовать событие KeyDown в форме, чтобы перехватить нажатие клавиши, а затем выполнить любое действие, которое вы хотите. Например:
private void MyForm_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Right)
{
this.SelectNextControl(....);
e.Handled = true;
}
}
Не забудьте установить для свойства KeyPreview формы значение True.
Я думаю, это выполнит то, о чем вы просите:
private void form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Right)
{
Control activeControl = form1.ActiveControl;
// may need to check for null activeControl
form1.SelectNextControl(activeControl, true, true, true, true);
}
}