我有一個TStringGrid,我想刪除選定的行。我試過的基本功能只刪除最後的行。如何刪除任意行?如何刪除TStringGrid行?
10
A
回答
11
如果你只嘗試過的代碼刪除最後一排,那麼你很可能只是遞減RowCount
財產。這確實總是對行列表的末端進行修改。考慮到這一點,您可以編寫代碼以確保您不再需要的行是最後一行,然後然後刪除最後一行。 (最直接的方法是移動行,並有一個MoveRow
方法,但它的保護。如果你想打電話保護的方法,不過,你可能也只是call DeleteRow
代替。)
僅使用公開和已發佈的成員,可以編寫一個刪除任意行的循環。例如,這裏的一些代碼通過Scalabium Software's FAQ on this topic啓發:每行的
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;
它的內容複製下面要刪除入行的上方的一個。在循環結束時,您要刪除的行已被覆蓋(緊接着它的下一行),並且最後一行有兩個副本。然後它只是刪除最後一行。
要刪除網格的當前行,這樣調用該函數:
DeleteRow(Grid, Grid.Row);
9
網格的選定行由其屬性給出。
TCustomGrid
有一個DeleteRow
方法,但它是受保護的,所以除非從該類的後代中除外,否則不能調用它。儘管如此,很容易規避這種限制。聲明一個TCustomGrid
後代,然後鍵入您的網格控件到該新類型。結果請致電DeleteRow
。
type
TCustomGridAccess = class(TCustomGrid) end;
procedure DeleteGridRow(g: TCustomGrid; row: Integer);
begin
TCustomGridAccess(g).DeleteRow(row);
end;
這工作,因爲在Delphi中,用保護的可見成員都是隱含公共單位相同類的聲明中。雖然TCustomGrid
在網格單元中聲明,但我們的TCustomGridAccess
類別在單元中聲明爲單元,因此您的單元可以訪問其所有受保護方法,包括DeleteRow
。
如果你的Delphi版本夠新,那麼你可以使用一個類幫手。類助手可以訪問受保護的成員,並且不需要對技術上無關的類型進行類型轉換。
type
TCustomGridHelper = class helper for TCustomGrid
public
procedure DelRow(ARow: Integer);
end;
procedure TCustomGridHelper.DelRow(ARow: Integer);
begin
Self.DeleteRow(ARow);
end;
然後,只需使用你聲明助手的單位。的TCustomGrid
任何後代會自動有一個DelRow
方法,你可以調用就像任何其他的格法:
grid.DelRow(grid.Row);
相關問題
- 1. 如何在TStringGrid中顯示行號?
- 2. 如何行刪除
- 3. Delphi livebinding TClientDataSet TStringGrid運行時
- 4. 如何驗證刪除行?
- 5. 如何刪除行數據
- 6. 如何刪除該行?
- 7. 如何刪除新行
- 8. uwp如何刪除一行
- 9. 如何刪除此行表
- 10. 如何從TableLayout刪除行?
- 11. 如何刪除中間行
- 12. 如何刪除重複行
- 13. 如何刪除換行符
- 14. 如何刪除評論行
- 15. 如何刪除前100行?
- 16. 如何刪除更多行?
- 17. 如何從txt刪除行?
- 18. 如何刪除行解析
- 19. MySQL - 刪除一行,如何?
- 20. Css如何刪除空行
- 21. 如何用openpyxl刪除行?
- 22. 如何刪除空白行?
- 23. 如何刪除模式行
- 24. 如何刪除一行?
- 25. JQuerymobile如何刪除行距
- 26. 如何刪除axvspan行?
- 27. 如何刪除GridBagLayout的行
- 28. 如何刪除這些行
- 29. 如何正確刪除行?
- 30. 如何刪除我行上的換行
要添加,如果你只需要對象(像我這樣的,從對象,而不是單元格的內容在單元格動態繪圖數據) ,然後用'Grid.Objects [0,I]:= Grid.Objects [0,I + 1];'替換第二行。這比替換甚至沒有使用的全部內容要快得多。 – 2016-12-02 17:24:08