ListView에서 언제든지 기존의 ListItem에 개체를 첨부 할 수 있습니까? (나는 ListItem에 AddItem
이라는 객체를 붙일 수 있지만 ListItem을 만든 후에 객체를 첨부해야 함을 알고 있습니다.)이미 존재하는 ListItem에 객체 첨부하기?
답변
TListItem.Data
속성을 통해 액세스 할 수 있습니다. 예를 들어 :
var
ListItem: TListItem;
begin
ListView1.AddItem('Item 1', nil);
...
ListItem := ListView1.Items[0];
ListItem.Data := Edit1;
TEdit(ListItem.Data).Text := 'Updated text...';
end;
감사합니다. 객체를 ListItem에 연결하는 방법을 알 필요가 있습니다. 객체가 AddItem으로 첨부 된 후 객체에 액세스하는 방법이 아니라, 만들어진 후에 ListItem에 객체를 연결할 수 있어야합니다. 감사. – user1580348
@user - 첫 번째 문장은 여러분의 답입니다 : Item.Data : = ... –
당신은 TListItem
의 Data
속성을 사용하여이 문제를 해결 할 수있다. 종종 쉽고 빠르게 접근 할 수 있습니다. 약간의 주름은 관련 데이터의 수명을 관리하기 위해 목록 항목이 필요한 경우입니다. 이 경우 노드가 소멸 될 때 연결된 데이터를 마무리하려면 OnDeletion
이벤트 처리기를 구현해야합니다.
대체 방법은 TListItem
의 하위 클래스를 사용하는 것입니다.
type
TMyListItem = class(TListItem)
private
FDateTime: TDateTime;
public
property DateTime: TDateTime read FDateTime write FDateTime;
end;
그런 다음 목록보기의 OnCreateNodeClass
이벤트에 대한 처리기를 구현 : 첫째, 서브 클래스를 정의합니다. 이것은리스트 뷰가 인스턴스화하는리스트 아이템의 실제 클래스를 결정합니다.
procedure TForm1.ListView1CreateItemClass(Sender: TCustomListView;
var ItemClass: TListItemClass);
begin
ItemClass := TMyListItem;
end;
이제 목록보기는 TMyListItem
클래스 항목을 생성합니다.
따라서 다른 속성처럼 목록 항목의 DateTime
속성에 액세스하면됩니다. 물론이 접근법은 더 많은 정보를 저장하도록 확장 될 수 있습니다.
다른 점은 목록보기 컨트롤에서 컴파일 시간이 TListItem
인 항목을 제공한다는 것뿐입니다. 그래서 당신은 상영 할 필요가 있습니다.
예를 들어, 항목을 편집 할 때 무엇인가하고 싶다고 가정 해보십시오. 이벤트 핸들러는 다음과 같습니다 항목 유형 TListItem
로 전달됩니다
procedure ListView1Edited(Sender: TObject; Item: TListItem; var S: string);
하는 것으로. 따라서 다음과 같이 작성해야합니다 :
procedure TForm1.ListView1Edited(Sender: TObject; Item: TListItem;
var S: string);
var
MyItem: TMyListItem;
begin
MyItem := Item as TMyListItem;
if MyItem.DateTime ....
end;
감사합니다, David, 대체 접근 방식에 대한 훌륭하고 광범위한 설명입니다! 그러나 CreateItemClass 대안을 사용할 때 사용자가 항목을 삭제하면 어떻게됩니까? ListView도 추가 된 사용자 정의 데이터 필드를 처리하고 삭제합니까? (예 : FDateTime). – user1580348
예. 항목에 대해 무료로 전화를 걸면 해당 필드는 개체의 필드와 마찬가지로 처분됩니다. –
모든 ListView 메서드 구현에서 Item 매개 변수를 상향 캐스트해야합니까, 아니면 사용자 지정 데이터 필드에 액세스해야하는 곳에서만 필요합니까? – user1580348
- 1. 자바는 이미 존재하는 ArrayList를
- 2. 이미 존재하는 파일을 작성하십시오.
- 3. 양조는 HBase를 이미 존재하는
- 4. 이미 존재하는 아이폰 코드
- 5. 이미 존재하는 삭제 절차?
- 6. 이미 존재하는 키 수정
- 7. PHP로 요청 객체에 객체 첨부하기
- 8. 릴리스 이후에 존재하는 객체
- 9. VB.Net을 통해 이미 열려있는 메일에 파일 첨부하기
- 10. 이미 존재하는 페이지를 이메일로 보내기
- 11. 이미 존재하는 확인란 옵션 편집
- 12. 데이터베이스에 이미 존재하는 시간 찾기
- 13. 이미 존재하는 파이썬 프로그램 자동화
- 14. 이미 존재하는 프로젝트에 opencv 추가하기
- 15. OpenGL에서 이미 존재하는 텍스처를로드하는 방법
- 16. matplotlib에서 이미 존재하는 숫자를 닫습니다.
- 17. GenerationType.SEQUENCE는 이미 존재하는 ID를 생성합니다.
- 18. 이미 존재하는 행을 편집하는 방법
- 19. django : 이미 존재하는 객체에서 select_related()?
- 20. 이미 존재하는 MediaElementPlayer를 얻는 방법
- 21. 이미 존재하는 날을 확인하고 싶습니다
- 22. 이미 존재하는 경우 이름 변경
- 23. 문제 이미 존재하는 항목을 추가하려면
- 24. 아이폰에 이미 존재하는 안드로이드 앱
- 25. 이미 존재하는 jar 파일 게시
- 26. 이미 존재하는 라이브러리에서 라이브러리 만들기
- 27. 이미 존재하는 구조 확인을위한 루프을하거나하지
- 28. 클래스 내에 이미 존재하는 numpy 배열을 정의합니다.
- 29. Riak에서 이미 존재하는 객체를 색인화하는 방법
- 30. ListItem에 MenuItem을 동적으로 연결합니다.
'Data'를 사용하는 대신'OnCreateItemClass'를 사용하고'TListItem'의 전용 서브 클래스를 만들 수 있습니다. –
@DavidHeffernan 감사합니다. 어떻게하는지 예제가 있습니까? – user1580348
목록 항목에 무엇을 저장하고 있습니까? –