Delphi(FMX) 具有多个单选按钮的实时绑定

Delphi(FMX) Livebindings with Multiple RadioButtons

我有一个带有 2 RadioButtons(具有相同组名)的表单,我需要在使用 LiveBindings 字段状态。

一个组件到一个字段很容易,但在这种情况下,我有两个组件从一个字段获取和设置值。

我创建了一个函数,returns radiobutton 通过 Groupname 选择并手动填写字段,但我想要更自动化的东西。

在此先致谢!

以下是完成此操作的步骤。

  1. 创建您的两个 RadioButton,将其命名为 RadioButton1RadioButton2
  2. 将两个单选按钮的 GroupName 属性 设置为相同的字符串。
  3. 右键单击您的第一个单选按钮并select绑定视觉...
  4. 在 LiveBindings 设计器中,右键单击您的单选按钮和 select Bindable Members,然后 select 复选框 IsChecked,然后单击确定按钮。
  5. 仍在实时绑定设计器中,现在在 IsChecked 属性 和您希望绑定的字段之间拖动一个 link(请注意,这可以是字符串字段)。
  6. 对另一个单选按钮重复步骤 4 和 5。

现在你快崩溃了,但你需要将字符串转换为布尔值,这样 IsChecked 属性 就会有一个布尔值。为此,select 来自 LiveBindings Designer 的绑定 link 用于您的单选按钮。然后在其CustomFormat属性中赋值如下字符串

IfThen(ToStr(%s)="Poor",True, False)

这将允许在基础数据库值为 'Poor'

时检查单选按钮

除了使用不同的字符串外,对其他单选按钮执行相同的操作

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;