Delphi(FMX) Livebindings с несколькими радиокнопками
У меня есть форма с 2 RadioButtons
(с тем же GroupName) и мне нужно сохранить 'A'
(если выбран RadioButton1) или 'I'
(если выбран RadioButton2) в поле Status с помощью LiveBindings.
От одного компонента к одному полю легко, но в этом случае у меня есть два компонента, которые получают и устанавливают значения из одного поля.
Я создал функцию, которая возвращает radiobutton
выбирая через Groupname
и заполните поле вручную, но я хотел что-то более автоматическое.
Заранее спасибо!
1 ответ
Вот шаги для достижения этой цели.
- Создайте две кнопки RadioButton
RadioButton1
а такжеRadioButton2
, - Установите для их свойства GroupName одинаковую строку для обоих переключателей.
- Щелкните правой кнопкой мыши 1-й переключатель и выберите Bind Visually...
- В конструкторе LiveBindings щелкните правой кнопкой мыши переключатель и выберите
Bindable Members
, а затем установите флажокIsChecked
с последующим нажатием кнопки ОК. - Все еще в конструкторе Live Bindings, теперь перетащите ссылку между
IsChecked
свойство и поле, к которому вы хотите привязать (обратите внимание, это может быть строковое поле). - Повторите шаги 4 и 5 для другого переключателя.
Теперь вы почти не работаете, но вам нужно преобразовать строку в логическое значение, чтобы IsChecked
свойство будет иметь логическое значение. Для этого выберите ссылку привязки в конструкторе LiveBindings для своей кнопки-переключателя. Тогда в своем CustomFormat
свойство, присвойте следующую строку
IfThen(ToStr(%s)="Poor",True, False)
Это позволит переключателю переключаться, когда значение базовой базы данных "Плохо"
Сделайте то же самое для других переключателей, за исключением использования другой строки
IfThen(ToStr(%s)="Excellent",True, False)
Теперь, чтобы дать переключателям возможность изменять поле основной базы данных, вам нужно будет прикрепить код для выполнения этого. Давайте использовать радио кнопки OnClick
событие (прикрепить к обоим переключателям). Этот код предполагает, что ваш базовый набор данных называется FDCustomer
, и ваше поле называется Status
, Обратите внимание, что во время события переключатель еще не отмечен, поэтому мы ищем IsChecked
быть ложным.
if Sender = RadioButton1 then
begin
if not TRadioButton(Sender).IsChecked then // checking
begin
fdcustomer.Edit;
fdcustomer.FieldByName('Status').AsString:= 'Poor';
end;
end
else if Sender = RadioButton2 then
begin
if not TRadioButton(Sender).IsChecked then
begin
fdcustomer.Edit;
fdcustomer.FieldByName('Status').AsString:= 'Excellent';
end;
end;