Войти

Показать полную графическую версию : [решено] C#. Перехват нажатия Enter


Delirium
26-02-2010, 08:55
Имеется: форма с кучкой контролов. По умолчанию переходим между полями кнопкой TAB.
Возник вопрос: а нельзя ли сделать переход по клавише Enter?
Как ни пытался, перехватываются любые кнопки, кроме Enter и некоторых других.

Drongo
26-02-2010, 13:14
Delirium, Если на С++ пойдёт такая идея? В обработчике OnKeyPress компонента Edit по нажатию на Enter устанавливать SetFocus() для другого компонента, например Edit2 в Edit2 устанавливать для Edit3 или другого и так далее.
...
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(Key == VK_RETURN) {
Edit2->SetFocus();
}
}
...

Delirium
27-02-2010, 01:04
Идея понятна, посмотрим, что получится и отпишусь. Минус только в том, что надо кучу раз прописывать данное действие, т.к. полей около 50.

Работает. Единственное но: надо убрать у самой формы привязки к AcceptButton, иначе Enter всегда будет жать на кнопку по умолчанию.

Delirium
27-02-2010, 01:53
В итоге родилась небольшая функция:

private void ChangeFocus(KeyPressEventArgs e, Control ctrl)
{
if(Properties.Settings.Default.FocusByEnter == true)
{
if (e.KeyChar.ToString() == "\r")
ctrl.Focus();
}
}

В зависимости от значения параметра Properties.Settings.Default.FocusByEnter, включается или отключается возможность перехода по Enter. Значение меняется в настройках программы. Очень удобно стало :)

В событии KeyPress стало достаточно вызвать функцию: ChangeFocus(e, TextBoxFIO);

Drongo
27-02-2010, 11:41
Единственное но: надо убрать у самой формы привязки к AcceptButton, иначе Enter всегда будет жать на кнопку по умолчанию. »Да-да-да, я тоже это уже заметил. :yes:




© OSzone.net 2001-2012