Jump to content
Message added by Viktor Akselrod,

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

  • Status: Fixed
  • Priority: Normal
  • Resolution: Fixed
  • Platform: Android, iOS
  • Affects version 1.9.2.1
  • Fix version: 1.9.3.0

Добрый день.

Как на время обновления списка, отключить событие OnChanged?

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

в VCL или FMX возможен был подобный код:

 fgComboBox1.OnChanged := nil;
   fgComboBox1.BeginUpdate;	
   fgComboBox1.Clear;
   i := 0;
   while i < 10 do
   begin
     fgComboBox1.AddTextItem(inttostr(i));
     inc(i);
   end;
   fgComboBox1.EndUpdate;	               

 fgComboBox1.OnChanged := fgComboBox1Changed;

в котором на время составления списка "отключалось" событие OnChanged. В fgx  такая схема не работает.

И еще один связанный вопрос: событие OnChanged всегда вызывается при появлении формы (после OnShow). Возможно ли отключить это срабатывание? или, хотя бы, узнать, что это событие вызвано не выбором пользователя?


User Feedback

Recommended Comments

Артем

Members
7 минут назад, s.fedotenko@gmail.com сказал:

Добрый день.

Как на время обновления списка, отключить событие OnChanged?

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

в VCL или FMX возможен был подобный код:


 fgComboBox1.OnChanged := nil;
   fgComboBox1.BeginUpdate;	
   fgComboBox1.Clear;
   i := 0;
   while i < 10 do
   begin
     fgComboBox1.AddTextItem(inttostr(i));
     inc(i);
   end;
   fgComboBox1.EndUpdate;	               

 fgComboBox1.OnChanged := fgComboBox1Changed;

в котором на время составления списка "отключалось" событие OnChanged. В fgx  такая схема не работает.

И еще один связанный вопрос: событие OnChanged всегда вызывается при появлении формы (после OnShow). Возможно ли отключить это срабатывание? или, хотя бы, узнать, что это событие вызвано не выбором пользователя?

я подобное сделал используя атрибут Tag у компонента

  • Administrators

Здравствуйте.

2 часа назад, s.fedotenko@gmail.com сказал:

Как на время обновления списка, отключить событие OnChanged?

Стандартно такой возможности нет. Вы можете на время обнулить событие OnChanged перед заполнением списка и восстановить событие после заполнения.

2 часа назад, s.fedotenko@gmail.com сказал:

событие OnChanged всегда вызывается при появлении формы (после OnShow)

Есть такой момент. Возможно в будущем откажемся от такого поведения.

1 час назад, Viktor Akselrod сказал:

Вы можете на время обнулить событие OnChanged перед заполнением списка и восстановить событие после заполнения.

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

  • Administrators
47 минут назад, s.fedotenko@gmail.com сказал:

Я писал выше - такой способ не работает. Событие приходит уже после изменения списка, а не во время. 

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

47 минут назад, s.fedotenko@gmail.com сказал:

И не известно где восстанавливать событие.

Восстанавливать сразу после заполнения. Ровно так, как у вас сделано в первом сообщении.

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

Спасибо.

1 час назад, Viktor Akselrod сказал:

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

пример тривиальный:

Скрытый текст

...

procedure TFormMain.fgButton1Tap(Sender: TObject);
var
  i: integer;
begin

  fgComboBox1.OnChanged := nil;
  fgComboBox1.ItemIndex := -1;

  fgComboBox1.Clear;
  i := 0;
  while i < 10 do
  begin
    fgComboBox1.AddTextItem(inttostr(i));
    inc(i);
  end;
  fgComboBox1.ItemIndex := 5;
  fgComboBox1.OnChanged := fgComboBox1Changed;

  TfgToastFactory.Show('Update');

end;

procedure TFormMain.fgComboBox1Changed(Sender: TObject);
begin
  TfgToastFactory.Show('fgComboBox1Changed');
end;

...

по идее при нажатии на кнопку fgButton1, событие fgComboBox1Changed не должно срабатывать, но оно есть и уже после выхода из fgButton1Tap(), соответственно  схема:

fgComboBox1.OnChanged := nil;

...

fgComboBox1.OnChanged := fgComboBox1Changed;

смысла не имеет.

Скрытый текст

Project7.zip

  • Administrators

Android не перестает удивлять 🙂. Спасибо за пример. Будем разбираться.

  • Administrators

Теперь события TfgComboBox.OnChanged, TfgComboBox.OnItemSelected не вызываются при создании компонента. 

Так же при обнулении OnChanged на время изменений структуры TfgComboBox событие TfgComboBox.OnChanged не будет вызываться

  • Administrators

Значение Статус изменено на: Fixed

Значение Резолюция изменено на: Fixed

Значение Версия с исправлением изменено на: 1.9.3.0

Create an account or sign in to comment

Recently Browsing 0

  • No registered users viewing this page.