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 に答える