世界上最大的BUG,你能解吗? ( 积分: 100 )

  • 主题发起人 主题发起人 delphi5988
  • 开始时间 开始时间
D

delphi5988

Unregistered / Unconfirmed
GUEST, unregistred user!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, CheckLst, ComCtrls;

type
TForm1 = class(TForm)
ListView1: TListView;
ListBox1: TListBox;
CheckListBox1: TCheckListBox;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button2Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
var
i2,i,i3:integer ;
temp:string;
s:string;

begin
if form1.CheckListBox1.Items.Count>0 then
begin
for i := 0 to form1.CheckListBox1.Count-1 do
begin
if form1.CheckListBox1.Checked=true then
begin
temp:=form1.CheckListBox1.Items;

for i2:=0 to form1.ListView1.Items.Count-1 do
begin
if form1.ListView1.Items.Item[i2].SubItems[1]=temp then
begin
s:=form1.ListView1.Items.Item[i2].Caption;

//这个地方I2只能比Listbox.item多不会少

for i3 :=0 to form1.ListBox1.Count-1 do
begin
if form1.ListBox1.Items.Strings[i3]=s then
begin
form1.ListBox1.Items.Delete(i3);
end;
end;

end;



end;



end;


end;

end;
end;

end.
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, CheckLst, ComCtrls;

type
TForm1 = class(TForm)
ListView1: TListView;
ListBox1: TListBox;
CheckListBox1: TCheckListBox;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button2Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
var
i2,i,i3:integer ;
temp:string;
s:string;

begin
if form1.CheckListBox1.Items.Count>0 then
begin
for i := 0 to form1.CheckListBox1.Count-1 do
begin
if form1.CheckListBox1.Checked=true then
begin
temp:=form1.CheckListBox1.Items;

for i2:=0 to form1.ListView1.Items.Count-1 do
begin
if form1.ListView1.Items.Item[i2].SubItems[1]=temp then
begin
s:=form1.ListView1.Items.Item[i2].Caption;

//这个地方I2只能比Listbox.item多不会少

for i3 :=0 to form1.ListBox1.Count-1 do
begin
if form1.ListBox1.Items.Strings[i3]=s then
begin
form1.ListBox1.Items.Delete(i3);
end;
end;

end;



end;



end;


end;

end;
end;

end.
 
你的代码能不简化一点,看得累
世界上最大的BUG,是什么
 
最里面那层关于ListBox1的循环不应该用for:因为循环里面有可以删除列表项目的语句,也就是说列表的项目数可能会减少,这样一来,由于for的循环次数是在开始进行循环之前就计算好了的,不会在循环过程中发生改变,所以一旦列表中某个项目被删除,当循环进行到已经被删除掉的下标时,就会导致下标越界的错误。
所以,正确地方法应该是改为用while循环。
 
同意SparkV,不过也可以写成
for i3 := form1.ListBox1.Count-1 downto 0 do
BTW,你的代码写的也太烂了点吧
 
这个所谓的最大的BUG是没错啦,但那是长在他脑子里,与人不关。。。。
 
开了个最大的玩笑!
 
与别人无关,上他脑子里的BUG
 
好大的BUG啊。我解不了。只能FORMAT他的脑子了。
 
我还以为是什么呢,不要总是开玩笑骗人进来
 
晕,通常情况下都是自己的代码犯了低级错误,呵呵。。。。
楼主那个bug在哪里哦,还不赶快出来解说估计大家都毛了哦!
 
我想进来骗个分的,但这Bug实在太大,撤退
 
學雷鋒, 簡單修一下, 免得那么多人罵你
procedure TForm1.Button2Click(Sender: TObject);
var
i2, i, i3: integer ;
temp: string;
s: string;
begin
if form1.CheckListBox1.Items.Count > 0 then
begin
for i := 0 to form1.CheckListBox1.Count - 1 do
begin
if form1.CheckListBox1.Checked then
begin
temp := form1.CheckListBox1.Items;

for i2:=0 to form1.ListView1.Items.Count - 1 do
begin
if form1.ListView1.Items.Item[i2].SubItems[1] = temp then
begin
s := form1.ListView1.Items.Item[i2].Caption;

// 这个地方I2只能比Listbox.item多不会少
for i3 :=0 to form1.ListBox1.Count - 1 do
begin
if form1.ListBox1.Items.Strings[i3] = s then
begin
form1.ListBox1.Items.Delete(i3);
end;
end;
end;
end;
end;
end;
end;
end;

end.
 
哈哈,你厉害
最大的BUG也是以由某个人做出来的

同意SparkV
 
后退
顶部