• 0
chaplin.u@gmail.com

какие евенты нужно использовать ?

Вопросы

У меня есть компоненты ( чекбоксы , комбобоксы..)  значение которых я устанавливаю програмно или вручную.  OnChange не различает как его поменяли ( вручную юзером или программа прочитала).

какие евенты нужно использовать чтобы было понятно я получил это от юзера или прочитал програмно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 ответа на этот вопрос

  • 0

Программное изменение обычно используется при инициализации.
Чаще всего требуется, чтобы "программное изменение" не вызывало onChange и что-либо в этом духе. Это просто не нужно, поскольку вы и так знаете, что вот в этот момент времени значение меняется. Посему - срабатывание события отключают. Например, так:

var
  OldOnChange: TNotifyEvent;
begin
  OldOnChange:=myContol.OnChange;
  try
    myControl.OnChange:=nil; // вырубили обработчик события
    myControl.чего-то-там; // делаем то, что потенциально может вызвать onChange
  finally
    myControl.OnChange:=OldOnChange; // восстановили его
  end;
end;

Если после подобных манипуляций нужно вызвать "штатный" обработчик - в коде можно это сделать, например, так:

OldOnChange(myControl); // и вот здесь, если все-таки требуется что-то различать, стоит использовать, например, Nil в качестве Sender-а

И в самом обработчике уже проверять Sender-а, и в зависимости от него - выполнять нужные действия.

Изменено пользователем kami

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Похожий контент

    • От haword
      Уперся в проблему и думаю как ее можно красиво решить. Короче смысл такой. На форме один ListView. В нем список. При выбора записи нужно перезаполнить ListView данными из подкатегории на которую ссылается выбранное поле. Проблема в том что в OnItemClick нельзя очищать ListView, после выхода из обработки выскакивает ошибка обращения к этому Item так как оно используется после отработки события. Попробовал сделать на OnClick. Вышла другая проблема, при использовании тачэкрана, когда HasTouchTracking выдает true, приходится два раза нажимать на поле или задержку пальцем делать что бы получить нужные данные через Selected или ItemIndex. Пока что придумал так это сделать два ListView и через visible переключать их. Но это грабли. Может у кого то есть более красивое решение? 
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу