D
delhpi
Unregistered / Unconfirmed
GUEST, unregistred user!
有个TStringGrid,第一行是标题行,第一行、第一列是固定的。第一列是行序号列,另外的列中有一列是“姓名”列。另外已知一个TStringList实例nameList,并且Sorted:=true;Duplicates := dupIgnore;里面已经有若干项,比如有张三,李四等。现在要将Stringgrid中,“姓名”列中的值在nameList中的所有行删除。下面是我的山寨代码,功能是实现了。想请教大家,想学习一下更正规一点的代码。var i, S, j, F: integer; beginwith SgSend do begin for i := 1 to RowCount - 1 do if NameList.Find(Cells[NameCol, i], F) then rows.Clear; s := 0; for i := 1 to rowCount - 1 do if length(cells[0, i]) = 0 then //这行是空白 if s < RowCount - 1 then //上次查找 没有到末尾 for j := i + 1 to rowCount - 1 do //从下面开始找一非空行 begin if j = RowCount - 1 then s := j; if length(cells[0, j]) > 0 then //应该保留的行 begin rows.Assign(rows[j]); cells[0, i] := inttostr(i); rows[j].Clear; break; end; end; for i := RowCount - 1 downto 1 do if length(Cells[0, i]) = 0 then begin if RowCount >2 then RowCount := RowCount - 1; end; end;end;