TStringGrid가 있는데 선택한 행을 삭제하려고합니다. 내가 시도한 기본 사항은 이고 마지막 행은 행입니다. 임의의 행은 어떻게 삭제합니까?TStringGrid 행을 어떻게 삭제합니까?
답변
만 해봤 코드가 마지막 행을 삭제하는 경우, 당신은 아마 단지를 감소시키는 것 : TCustomGrid
의 모든 자손이 자동으로 다른 모든 그리드 방법처럼 호출 할 수있는 DelRow
방법을해야합니다 RowCount
속성 실제로 행 목록의 끝에서 항상 수정됩니다. 이를 염두에두고, 더 이상 필요없는 행이 마지막 행이되도록 코드를 작성하고 다음에 마지막 행을 삭제하십시오. (가장 직접적인 방법은 이동 행에있을 것이고, 당신은뿐만 아니라 단지 call DeleteRow
대신. 수 있지만, 거기에 MoveRow
방법은, 그러나 당신이 보호 된 메서드를 호출 할 경우가. 보호거야)
공공에만 사용 게시 된 멤버가 있으면 임의의 행을 삭제하는 루프를 작성할 수 있습니다. 다음 각 행 의
procedure DeleteRow(Grid: TStringGrid; ARow: Integer);
var
i: Integer;
begin
for i := ARow to Grid.RowCount - 2 do
Grid.Rows[i].Assign(Grid.Rows[i + 1]);
Grid.RowCount := Grid.RowCount - 1;
end;
이 복사 내용을 위의 행에 삭제할 하나 예를 들어, 다음 Scalabium Software's FAQ on this topic에서 영감을 몇 가지 코드가있다. 루프가 끝나면 삭제하려는 행이 바로 아래 행에 의해 덮어 쓰여지고 마지막 행의 사본이 두 개 있습니다. 그런 다음 최종 행을 삭제합니다.당신은 단지 객체를 필요로하는 경우 (자신처럼 동적으로 대신 셀 내용의 객체로부터 세포에서 데이터를 그리기),
DeleteRow(Grid, Grid.Row);
그리드의 선택된 행은 속성으로 지정됩니다.
TCustomGrid
에는 DeleteRow
메서드가 있지만 보호되어 있으므로 해당 클래스의 자손 내에서만 예외를 호출 할 수 있습니다. 그러나 이러한 제한을 우회하는 것은 쉽습니다. TCustomGrid
하위 항목을 선언하고 해당 새 형식으로 표 컨트롤을 입력합니다. 결과에 DeleteRow
로 전화하십시오. 델파이, 보호 가시성 회원이 클래스의 선언과 같은 단위 내에서 암시 적으로 공공 때문에
type
TCustomGridAccess = class(TCustomGrid) end;
procedure DeleteGridRow(g: TCustomGrid; row: Integer);
begin
TCustomGridAccess(g).DeleteRow(row);
end;
이 작동합니다. TCustomGrid
은 그리드 단위로 선언되어 있지만 TCustomGridAccess
클래스는 단위로 단위로 선언되므로 해당 단위는 DeleteRow
을 비롯한 모든 보호 된 방법에 액세스 할 수 있습니다. 델파이 버전은 충분히 새로운 경우
, 당신은 클래스 헬퍼를 사용할 수 있습니다. 클래스 도우미는 보호 된 멤버에 액세스 할 수 있으며 기술적으로 관련이없는 유형에 대해서는 형변환을 요구하지 않습니다.
type
TCustomGridHelper = class helper for TCustomGrid
public
procedure DelRow(ARow: Integer);
end;
procedure TCustomGridHelper.DelRow(ARow: Integer);
begin
Self.DeleteRow(ARow);
end;
그런 다음 헬퍼를 선언 한 곳에서 장치를 사용하십시오.
grid.DelRow(grid.Row);
- 1. UITableView에서 행을 어떻게 삭제합니까?
- 2. GridView 행을 어떻게 삭제합니까?
- 3. 분할 테이블에서 행을 어떻게 삭제합니까?
- 4. MySQL에서 중복 행을 어떻게 삭제합니까?
- 5. DataGrid에서 선택한 행을 어떻게 삭제합니까?
- 6. RowDeleting 이벤트 중에 GridView에서 행을 어떻게 삭제합니까?
- 7. MySQL 큰 테이블에서 중복 행을 어떻게 삭제합니까?
- 8. HBase는 행이 memstore에있는 동안 행을 어떻게 삭제합니까?
- 9. 기본 키가없는 모든 중복 행을 어떻게 삭제합니까?
- 10. HBase는 언제 실제로 행을 삭제합니까?
- 11. PK가없는 중복 행은 어떻게 삭제합니까?
- 12. 데이터 프레임의 헤더를 어떻게 삭제합니까?
- 13. TStringGrid 및 삽입 키
- 14. 확인란과 버튼을 사용하여 GridView에서 여러 행을 어떻게 삭제합니까?
- 15. 다른 쿼리 결과에 필드가있는 mysql 테이블의 행을 어떻게 삭제합니까?
- 16. 외래 키가있는 경우 행을 어떻게 삭제합니까? 예를 들어 SQL
- 17. 사용자가 행 헤더를 선택한 경우 행을 어떻게 삭제합니까?
- 18. JOIN과 ID없이 어떻게 삭제합니까?
- 19. 회선에서 \ n을 어떻게 삭제합니까?
- 20. Firebase에서 데이터베이스를 어떻게 삭제합니까?
- 21. 패턴이있는 파일은 어떻게 삭제합니까?
- 22. appdynamics에서 메트릭을 어떻게 삭제합니까?
- 23. 파일을 어떻게 삭제합니까?
- 24. 헤더를 어떻게 삭제합니까?
- 25. 어떻게 헥스에서 게시물을 삭제합니까
- 26. 레일스에서 어떻게 삭제합니까?
- 27. 테이블에서 레코드를 어떻게 삭제합니까?
- 28. OpenCV에서 cvseq을 어떻게 삭제합니까?
- 29. CloudKit 컨테이너는 어떻게 삭제합니까?
- 30. XML에서 속성을 어떻게 삭제합니까?
추가 :
이 같은 함수를 호출, 그리드의 현재 행을 삭제하려면 두번째 라인을'Grid.Objects [0, I] : = Grid.Objects [0, I + 1];로 대체한다. 이것은 심지어 사용되지 않는 전체 내용을 대체하는 것보다 약간 더 빠릅니다. –