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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2012, 22:34   #1
Fon_Blut
Пользователь
 
Аватар для Fon_Blut
 
Регистрация: 19.02.2011
Сообщений: 14
Лампочка Потеря фокуса Edit

Привет! Ситуация такая. Есть на форме эдит, данные записанные в него в обязательном порядке должны быть сохранены в БД, пока эдит находится в фокусе.

Пока обрабатывается в событии OnChange, но записывать каждый новый введенный символ в базу не эффективно я считаю.

Наилучший способ был бы при обработке события OnExit. Но, например, если нажать на кнопку, то сначала обработается событие OnClick кнопки, а затем уже OnExit эдита. До того как наступит событие OnClick кнопки, мы можем легко получить строку в БД в которой надо обновить поле, если произойдет OnClick мы получим уже новую строку и данные потеряются.

В общем-то можно использовать глобальную переменную в которой будем хранить ссылку на старую запись в БД, но этот способ меня не особо привлекает. Может у кого-то есть идеи как заставить всегда выполняться сначала OnExit а потом уже всё остальное?
Fon_Blut вне форума Ответить с цитированием
Старый 29.05.2012, 22:58   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Это смотря какие кнопки. Для SpeedButton так. А для Button и BitBtn сначала OnExit эдита отработает, а потом OnClick кнопки

ADD - забыл добавить для SpeedButton OnExit эдита вообще не отработает, поскольку фокус на эдите и останется
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 29.05.2012 в 23:16.
Аватар вне форума Ответить с цитированием
Старый 30.05.2012, 01:56   #3
Fon_Blut
Пользователь
 
Аватар для Fon_Blut
 
Регистрация: 19.02.2011
Сообщений: 14
По умолчанию

Да, спасибо! Я как раз использовал SpeedButton! Теперь буду использовать обычные кнопки!
Fon_Blut вне форума Ответить с цитированием
Старый 30.05.2012, 20:16   #4
Fon_Blut
Пользователь
 
Аватар для Fon_Blut
 
Регистрация: 19.02.2011
Сообщений: 14
По умолчанию

А как насчет того, когда фокус переходит с эдита на дерево TreeView?!
Fon_Blut вне форума Ответить с цитированием
Старый 30.05.2012, 20:58   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Ставим точки останова в нужных местах и смотрим куда первому управление передается
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.05.2012, 22:05   #6
Fon_Blut
Пользователь
 
Аватар для Fon_Blut
 
Регистрация: 19.02.2011
Сообщений: 14
Сообщение

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ставим точки останова в нужных местах и смотрим куда первому управление передается
Ну, не без этого. Сначала выполняется OnChange дерева, потом OnExit эдита.

В общем скажу, что у меня конкретно. На форме есть дерево, для каждого узла соответственно есть набор эдитов, в котором редактируются свойства ветки. Поскольку само дерево может хранить только имя фактически, есть так же структура в которую пишутся все данные с эдитов (потот достаются через Data узла дерева). Ну и там между делом все это отправляется в БД. В конкретный момент времени выделен какой-то узел, по которому мы может узнать и структуру и запись в БД, поэтому пока эдит любой в фокусе, можем дублировать с них всё в структуру, а в БД при выходе. Но вот н всегда выход наступает первым. Если наступит OnChange дерева, будет выделен соответственно новый узел, и в OnExit эдита уже будет работать сохранение в БД для нового выделенного... Вот как-то так!
Fon_Blut вне форума Ответить с цитированием
Старый 30.05.2012, 23:09   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Сначала выполняется OnChange дерева, потом OnExit эдита
Это не победишь. Есть в TreeView OnChanging, он еще раньше OnChange отработает. Там можно попытаться решить выше указанные проблемы. Без доступных всем обработчикам переменных не обойтись. Пропишите их в private формы и всех делов.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Потеря фокуса Naive JavaScript, Ajax 1 16.11.2010 05:53
Потеря данных Марина520 Microsoft Office Word 0 13.06.2010 22:48
Потеря значений. С++ Снежинкина Помощь студентам 0 27.05.2010 13:03
Ошибка при наведении фокуса на Edit Gumer Общие вопросы Delphi 2 21.04.2010 00:13
Потеря фокуса окна в приложении Dr.Badnezz Общие вопросы Delphi 4 01.12.2008 23:18