Jump to content
Viktor Akselrod
Message added by Viktor Akselrod,

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

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

Добрый день.

Как на время обновления списка, отключить событие 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). Возможно ли отключить это срабатывание? или, хотя бы, узнать, что это событие вызвано не выбором пользователя?


Fix version: 1.9.3.0

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.