CPU的BUG,DELPHI的BUG?

devil2006 2006-11-02 12:15:04
procedure delAllRow();
var
i,rCount:integer;
begin
rCount:= Form1.valueListEdit1.rCount;
for i:=1 to rCount do
begin
Form1.valueListEdit1.DeleteRow(i);
end;
end;

我在watch窗口中,观察 i 和 rCount 变量,居然发现,每一次循环,i是自增的,但是rCount却在自减,不知这是delphi的bug还是CPU的BUG
按理来说,Form1.valueListEdit1.rCount会自减是正常的,因为delete了一行,他的行数就减一,但是rCount却应该是不变的。程序作用就是把valuleListEdit1
中的各行删除,有人愿意把代码COPY到DELPHI中,帮我验证一下是否CPU的错误吗?
...全文
218 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hangzhou_hammer 2006-11-02
  • 打赏
  • 举报
回复
居然发现,每一次循环,i是自增的,但是rCount却在自减,
~~----------------------
当然了~~你是删了它的数据 rCount当然要减了~~
Darc 2006-11-02
  • 打赏
  • 举报
回复
还有,避免变量名与属性名同名。会造成不易察觉的隐性语法错误。
Darc 2006-11-02
  • 打赏
  • 举报
回复
推荐的写法:

with Form1.ValueListEdit1 do
begin
for i:=rCount downto 1 do
DeleteRow(i);
end;
Darc 2006-11-02
  • 打赏
  • 举报
回复
procedure delAllRow();
var
i,rCount:integer;
begin
rCount:= Form1.valueListEdit1.rCount;
for i:=1 to rCount do
begin
Form1.valueListEdit1.DeleteRow(i);
end;
end;

楼主,你的代码有问题。
在你删除第一行后,原第二行就成了新第一行,原第三行成了新第二行,以此类推。
而你的代码却是在删除第一行后,删除第二行,注意,此时的第二行已经是原来的第三行了。

你可以采用do2008(事情做了,才是事情)的方法。
建议用他的第二个写法。第一个写法有目标代码冗余,会多消耗CPU指令时间。
do2008 2006-11-02
  • 打赏
  • 举报
回复
晕~~~

DeleteRow方法删除一行,Count当然后自减一,不自减才是bug哩。

像样的逻辑,用while语句来实现

while (rCount>0) do //for i:=1 to rCount do
begin
Form1.valueListEdit1.DeleteRow(1);
rCount:=rCount-1;
end;

或者,用for语句就用downto
for i:=rCount downto 1 do
begin
Form1.valueListEdit1.DeleteRow(i);
end;

5,927

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧