Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] C#. Перехват нажатия Enter (http://forum.oszone.net/showthread.php?t=168574)

Delirium 26-02-2010 08:55 1356251

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

Drongo 26-02-2010 13:14 1356449

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 1357009

Идея понятна, посмотрим, что получится и отпишусь. Минус только в том, что надо кучу раз прописывать данное действие, т.к. полей около 50.

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

Delirium 27-02-2010 01:53 1357027

В итоге родилась небольшая функция:

Код:

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 1357228

Цитата:

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

Да-да-да, я тоже это уже заметил. :yes:


Время: 09:03.

Время: 09:03.
© OSzone.net 2001-