アイテムがTListViewに追加されたときに、どのようにイベントを捕捉できますか?TListView:アイテムが追加されましたか?
ドキュメントによれば、OnInsert
イベントは仕事をすると思っていました。それも、ハンドラに実際のTListItem
オブジェクトを渡します: OnInsert
は、新しい項目がリスト ビューに挿入された直後に発生します。
項目が がリストに追加されたばかりのときに応答するOnInsertイベントハンドラを作成します。 アイテムのパラメータが ここ
Itemsプロパティに追加されたTListItemのオブジェクトは、私のコードです:
procedure TForm1.Button1Click(Sender: TObject);
begin
with ListView1.Items.Add do
begin
Caption := 'foo';
SubItems.Add('bar');
end;
end;
procedure TForm1.TListView1Insert(Sender: TObject; Item: TListItem);
begin
//Item is empty
ShowMessage(Item.Caption);
end;
しかし、驚くべきことには、Item.Caption
は常に空です。私にナンセンスみたいだ。
EDIT:
示唆されているように、Items.AddItem()
への切り替えは、別の奇妙な問題につながります。 OnInsert
イベントハンドラが正常に機能するようになりましたが、TListView
にはTListItem.Caption
が表示されません。
procedure TForm1.Button1Click(Sender: TObject);
begin
with ListView1.Items.Add do
begin
Caption := 'foo1';
SubItems.Add('bar1');
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
item: TListItem;
begin
item := TListItem.Create(ListView1.Items);
item.Caption := 'foo2';
item.Subitems.Add('bar2');
ListView1.Items.AddItem(item);
end;
procedure TForm1.ListView1Insert(Sender: TObject; Item: TListItem);
begin
//this now works as expected
ShowMessage(Item.Caption);
end;
これはなぜでしょうか?
ListView1ではなく、TListView1である必要があります。また、アイテムを追加するときにBeginUpdateおよびEndUpdateプロシージャを使用します。 –
'(Begin | End)Update()'を呼び出すことは、ListViewのペイントにのみ影響します(項目を変更している間は再ペイントしないようにする)、 –
@RemyLebeau確かめてください!私はそれらを使うことを提案しました。なぜなら、編集するアイテムを扱うとき(特にそれらがたくさんある場合)、私はいつもそうするからです。私は彼らがどんな場合でも使用されるべきだと思います。 –