首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++Builder 快速清空 StringGrid 單元格內容的技巧

     編輯:關於C++

在使用 C++Builder 的 TStringGrid 控件時,經常需要清空所有單元格的內容以便重新填充數據。若直接將 RowCount 設為 1 再增加行數,舊資料往往會殘留,導致顯示錯誤。本文介紹一個經實測可靠的清空並重填資料的標準流程。

核心程式碼範例

grdFileList->RowCount = 1; // 僅保留標題列
for (int irow = 0; irow < OpenDialog1->Files->Count; irow++) {
    grdFileList->RowCount++;           // 增加一行
    grdFileList->Rows[irow+1]->Clear(); // 清空該行所有儲存格
    grdFileList->Cells[0][irow+1] = ""; // 第 0 欄通常作為選取標記
    grdFileList->Cells[1][irow+1] = ExtractFileName(OpenDialog1->Files->Strings[irow]); // 檔名
    grdFileList->Cells[2][irow+1] = OpenDialog1->Files->Strings[irow]; // 含路徑完整檔名
    // ... 其他欄位填充
}
if (grdFileList->RowCount > 1)
    grdFileList->FixedRows = 1; // 將第一行固定為灰色標題列

關鍵點解析

  • 先歸零再遞增:將 RowCount 設為 1 會強制釋放除固定行外的所有列,確保記憶體乾淨。
  • 逐行 Clear:新增行後立即呼叫 Rows[i]->Clear(),避免舊資料殘留。
  • 顯式賦空值:對特定欄(如選取欄)再次指定空字串,雙重保險。
  • FixedRows 最後設定:資料填完後再鎖定標題列,避免操作固定行時觸發例外。

常見誤區

若僅執行 grdFileList->RowCount = 1; 而不在後續迴圈中 Clear(),當行數再次增長時,StringGrid 會重用先前配置的記憶體,導致舊字串「幽靈顯示」。

適用版本

經測試於 C++Builder 6 及 C++Builder 2009 正常運作,較新版本同樣適用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved