2

好像我需要一些项目帮助。我有一个例程,它将运行时多个 TabItems 构建到 firemonkey 中的页面控件上,并且我希望在选项卡上有一个关闭按钮。新选项卡有一个复选框,用于从 tabitems 的样式器加载关闭按钮。该页面有一个默认选项卡,并且在某个按钮内,我正在添加运行时新选项卡项。我已经设法应用事件来关闭默认标签页,但在运行时创建的标签页中不起作用。任何帮助,将不胜感激。

这是运行时 tabitems 的一段代码

procedure TForm1.Button1Click(Sender: TObject);
var
  t : TTabItem;
  o : TFmxObject;
  i : Integer;
  c : TControl;
begin
  t := TTabItem.Create(pgeControl);

  t.Parent := pgeControl;

  o := FindBinding('imgCloseTabPage');
  if o<>nil then
  begin
    for i := 0 to ComponentCount - 1 do
    begin
      if Components[i] is TCheckBox then
      begin
        TCheckBox(Components[i]).OnClick := CheckBox1Click;
      end;
    end;
  end;

  if pgeControl.TabCount - 1 <= nTab then
  begin
    nTab := nTab + 1;
    t.Index := nTab
  end
  else
  begin
    t.Index := pgeControl.TabCount - 1;
    nTab := pgeControl.TabCount - 1;
  end;
  t.Tag := nTab;

  t.Text := 'Some text...' + ' ' + IntToStr(nTab);
  t.Name := 'tabPatient' + IntToStr(nTab);

  t.Height := 35;
  t.Width := 250;
  t.Margins.Top := 0;
  t.Margins.Left := 0;
  t.Margins.Bottom := 0;
  t.Margins.Right := 0;

  t.Padding.Top := -5;
  t.Padding.Left := 0;
  t.Padding.Bottom := 0;
  t.Padding.Right := 0;

  t.TextAlign := TTextAlign.taLeading;
  t.Width := (Length(t.Text) * 6 ) + 60;
  t.Font.Size := 15;
  t.StyleLookup := 'tabMainStyle1';

  l := TLayout.Create(t);
  l.Parent := t;
  l.Align := TAlignLayout.alClient;
  l.Margins.Top := -5;
  l.Margins.Left := 5;
  l.Margins.Right := 5;
  l.Margins.Bottom := 5;
  l.Padding.Top := 0;
  l.Padding.Left := 0;
  l.Padding.Bottom := 0;
  l.Padding.Right := 0;

  pgeControl.ActiveTab := pgeControl.Tabs[pgeControl.TabCount - 1];
end;
4

1 回答 1

1

您应该在应用自定义样式调用 FindBinding 。目前你之前调用过这个,所以它找不到对象。此外,您在寻找对象时出现了错误。

所以把这个

o := t.FindBinding('imgCloseTabPage');
if o<>nil then
begin
  if o is TCheckBox then
    TCheckBox(o).OnClick := CheckBox1Click;
end;

t.StyleLookup := 'tabMainStyle1';

并且应该分配事件。

于 2012-06-21T11:21:58.243 回答