Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2012, 13:55   #1
DeveloPerchik
Пользователь
 
Регистрация: 06.04.2012
Сообщений: 78
Вопрос Как сделать переход на поле которое Disabled??

Здравствуйте!
Есть довольно простая задача, которая что-то никак не решается нормальными способами. Есть 3 поля - Field1,Field2,Field3. Работают так - в поле Field1 пользователь вводит какие-то данные, на событие Field1.OnExit стоит проверка - если данные соответствуют некоему значению, то Field3.SetFocus, если не соответствуют то Field2.SetFocus. Вроде всё просто и работает нормально. Но, по-умолчанию (до ввода данных в поле Field1) нужно, чтобы Field2 было Disabled! И тут возникает проблема тк по событию Field1.OnExit курсор перепрыгивает к Field3 до проверки события OnExit и кода Field2.Enabled:=True и Field2.SetFocus, то есть курсор в любом случае переходит к Field3!
Ставить код на событие OnChange нельзя.
Кто знает как это порешать?
DeveloPerchik вне форума Ответить с цитированием
Старый 23.05.2012, 15:19   #2
DeveloPerchik
Пользователь
 
Регистрация: 06.04.2012
Сообщений: 78
По умолчанию

Field1.OnExit происходит по нажатию Tab. Нужно, чтобы после нажатия Tab в Field1 в событии OnExit при выполнении некоего условия открывалось поле Field2.Enabled:=True и в него ставился фокус.
Как это сделать???
DeveloPerchik вне форума Ответить с цитированием
Старый 23.05.2012, 16:18   #3
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
Восклицание

Цитата:
Сообщение от DeveloPerchik Посмотреть сообщение
Field1.OnExit происходит по нажатию Tab. Нужно, чтобы после нажатия Tab в Field1 в событии OnExit при выполнении некоего условия открывалось поле Field2.Enabled:=True и в него ставился фокус.
Как это сделать???
как я вас понял, нужно так:
Код:
Field2.Enabled:=True; //возможно ошибка в последовательности этих команд
Field2.SetFocus;
или дайте посмотреть фрагмент исходника

еще можно попробовать так:
Код:
if ({условие при котором нужно вернуться к Field2}) and (Field3.CanFocus = true) then
begin
  Field2.Enabled:=True;
  Field2.SetFocus;
end;
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 23.05.2012, 19:03   #4
DeveloPerchik
Пользователь
 
Регистрация: 06.04.2012
Сообщений: 78
По умолчанию

По логике события должны бы были происходить так:
Field.Exit - Field.OnExit - FocusNextControl
а происходят так:
Field.Exit - FocusNextControl - Field.OnExit
что вообще-то похоже на баг.

Решено через OnKeyPress key=tab.
DeveloPerchik вне форума Ответить с цитированием
Старый 23.05.2012, 19:11   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Решено через OnKeyPress key=tab.
Не все так просто, выход из поля не только по Tab возможен
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.05.2012, 19:44   #6
DeveloPerchik
Пользователь
 
Регистрация: 06.04.2012
Сообщений: 78
По умолчанию

А как ещё ?
DeveloPerchik вне форума Ответить с цитированием
Старый 23.05.2012, 20:33   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Имел ввиду мышинные выходы. А чем не устраивает
Код:
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  if условие then begin
    Edit2.Enabled:=True;
    ActiveControl:=Edit2;
  end;
end;
При переходе по табу Edit3.OnEnter (если он есть) не отработает 100% и фокус в Edit2 будет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.05.2012, 20:38   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

У меня так:
Код:
  Edit2.Enabled := True;
  Edit2.SetFocus;
Все прекрасно работает.
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать переключение языка ввода при попадании в определенное поле smoky Microsoft Office Access 6 15.09.2017 07:59
как сделать вычисляемое поле? posdnyaa Microsoft Office Word 3 09.11.2014 15:31
Как в делфи сделать переход по ссылке artbotva Общие вопросы Delphi 11 06.05.2012 21:13
переход в другое поле после ввода буквы ГОСЕАН Помощь студентам 6 10.01.2012 09:36
Как сделать приложение которое снимает инфу с COM-порта. Uwe Общие вопросы Delphi 3 05.11.2008 03:44