Edit
У меня есть несеолько Edit'ов на форме. Подскажите, как по клавише enter сделать активным следующий Edit. Заранее спасибо.
Цитата:
Originally posted by Тимофей
У меня есть несеолько Edit'ов на форме. Подскажите, как по клавише enter сделать активным следующий Edit. Заранее спасибо.
У меня есть несеолько Edit'ов на форме. Подскажите, как по клавише enter сделать активным следующий Edit. Заранее спасибо.
У формы есть свойство - ActiveControl.Делаешь так.
Например надо, чтобы после Edit1 по нажатию интера стновился активным Edit2. У Edit1 на событие OnKeyDown пишешь обработчик:
if(Key==VK_RETURN)
Form1->ActiveControl = Edit2;
И Всё:)
Также можно написать аналогичный обработчик на событие OnShortCut приложения(Application). Перехватывается это событие с помощью компонента ApplicationEvents.
Цитата:
Originally posted by gray_k
У формы есть свойство - ActiveControl.Делаешь так.
Например надо, чтобы после Edit1 по нажатию интера стновился активным Edit2. У Edit1 на событие OnKeyDown пишешь обработчик:
if(Key==VK_RETURN)
Form1->ActiveControl = Edit2;
И Всё:)
Также можно написать аналогичный обработчик на событие OnShortCut приложения(Application). Перехватывается это событие с помощью компонента ApplicationEvents.
У формы есть свойство - ActiveControl.Делаешь так.
Например надо, чтобы после Edit1 по нажатию интера стновился активным Edit2. У Edit1 на событие OnKeyDown пишешь обработчик:
if(Key==VK_RETURN)
Form1->ActiveControl = Edit2;
И Всё:)
Также можно написать аналогичный обработчик на событие OnShortCut приложения(Application). Перехватывается это событие с помощью компонента ApplicationEvents.
Спасибо.
TWinControl *next =
FindNextControl((TEdit *)Sender,true,true,false);
if(next) next->SetFocus();
удобство в том, что функция одна на все контролы ;)
Цитата:
Originally posted by Relax
есть еще вариант - более универсальный. у каждого компонента есть свойство TabOrder - это номер, определяющий порядок, в котором фокус переходит на контролы по нажатию Tab. можно по ентеру делать то же самое:
TWinControl *next =
FindNextControl((TEdit *)Sender,true,true,false);
if(next) next->SetFocus();
удобство в том, что функция одна на все контролы ;)
есть еще вариант - более универсальный. у каждого компонента есть свойство TabOrder - это номер, определяющий порядок, в котором фокус переходит на контролы по нажатию Tab. можно по ентеру делать то же самое:
TWinControl *next =
FindNextControl((TEdit *)Sender,true,true,false);
if(next) next->SetFocus();
удобство в том, что функция одна на все контролы ;)
Не очень понятно, почему это должно срабатывать при нажатии Интера. Можно подробнее плиз :-? . на какое событие должен быть этот обработчик? OnShorCut?
на OnKeyPress или на OnKeyDown... также как ты писал - сравниваешь кей с VK_RETURN... только код внутри ифа другой... представь, что на форме, например, десять эдитов, которые надо заполнять последовательно. если устанавливать Active Control, то придется писать десять обработчиков, а если юзать FindNextControl(), то обработчик получается один для всех :)
void __fastcall TForm1::DBEdit5KeyPress(TObject *Sender, char &Key)
{
if(Key == VK_RETURN)
SelectNext(TForm1::ActiveControl, true, true);
}
Порядок табуляции выставляется так
Правой кнопкой на форме клик а там Tab Order
ну и упорядочиваешь