1

我使用以下方法将功能添加到我的 Treeviewitem 的复选框。

function TForm.CreateTVObj:TTreeviewItem;
var
  MyCheckbox:TCheckbox;
begin
  try
    result:=TTreeviewItem.create(nil);
    result.Parent:=Treeview;

    result.StyleLookup:='treeviewitemstyle';

    MyCheckbox:= result.FindStyleResource('check') as TCheckbox;
    //the functionality:
    MyCheckbox.OnChange:= CheckBoxChange;

  except
    on e:exception do begin
      ShowMessage('Error'+chr(13)+chr(13)+e.Message);
    end;
  end;
end;

现在我有以下问题:

它适用于有限数量的项目。如果我添加了很多项目,则 checkboxchange 仅针对前 9-12 个项目触发

有限制吗?如果我从顶部开始检查它们,则只有前 12 个工作。如果我先单击最后一项,则前 3 项也不起作用...

4

1 回答 1

3

您可能会发现复选框的 OnChange 事件在内部被树视图挂钩。

您需要改为挂接到树视图的 OnCheckChange 中。如果您使用的是 XE2,则 Sender 将是已更改的 ListBoxItem。

在 XE3 的早期版本中,它将是 TreeView 本身,您需要找到其他方法来查找更改的项目(即递归树元素并将它们的状态与原始数据进行比较)。

QC 显示这已在最近的更新中得到修复,但我没有机会对其进行测试http://qc.embarcadero.com/wc/qcmain.aspx?d=109138

于 2013-02-12T16:02:50.850 回答