这题有点意思(50分)

  • 主题发起人 主题发起人 unki
  • 开始时间 开始时间
U

unki

Unregistered / Unconfirmed
GUEST, unregistred user!
有6个LISTBOX,LISTBOX1里面有差不多2万行的数据,我想按一下BUTTON后把LISTBOX1里的数据分成5份,把分好的每一份分别分给LISTBOX2,LISTBOX3,LISTBOX4,LISTBOX5,LISTBOX6
不知道这个要怎么写,能给出具体代码加注释将感激不尽,得考虑到LISTBOX1里面有大数据
 
我来试试
比较苯的方法,用循环从listbox1中添加数据到其他5个。

以下代码在delphi7调试通过,测试22211行数据,大约10秒钟分配完毕(我的机器,普通pc机,winxp,内存 512 DDR,CPU C 1.7GHz)
----------------------------------------------
unit Unit1;

interface

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

type
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
ListBox2: TListBox;
ListBox3: TListBox;
ListBox4: TListBox;
ListBox5: TListBox;
ListBox6: TListBox
//以上是6个LISTBOX和一个BUTTON,不用注释了
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
aa:TEdit
//aa是listbox的Tobject的参数

implementation

{$R *.dfm}
//这个过程是为了在创建窗体的时候把listbox1里面添加22211行数据

procedure TForm1.FormCreate(Sender: TObject)

var
i:integer;
begin
for i:=1 to 22211 do
self.ListBox1.AddItem('aaa'+inttostr(i),aa);
end;

//按钮按下去执行的代码
procedure TForm1.Button1Click(Sender: TObject)

var
l:integer

//l是取得平均每个listbox里要分配多少行。(如果不能恰好除尽,则把余下的行放在最后一个listbox,也就是listbox6中。)
//k是循环控制变量
k:integer;
begin
l:=(self.ListBox1.Count div 5)
//把总行数用5整除即 l
//以下开始往另外5个listbox中写入行
for k:=0 to l-1 do
self.ListBox2.AddItem(self.ListBox1.Items.Strings[k],aa);
for k:=k to l*2-1 do
self.ListBox3.AddItem(self.ListBox1.Items.Strings[k],aa);
for k:=k to l*3-1 do
self.ListBox4.AddItem(self.ListBox1.Items.Strings[k],aa);
for k:=k to l*4-1 do
self.ListBox5.AddItem(self.ListBox1.Items.Strings[k],aa);
//在写入最后一个的时候,不能再用l控制结束了,用总行数,这样才能把不能除尽的行显示出来
for k:=k to self.ListBox1.Count-1 do
self.ListBox6.AddItem(self.ListBox1.Items.Strings[k],aa);
end;

end.


//这个程序经调试运行没有问题。
 
补充一下:
程序运行时的结果:
http://www.17php.com/others/delphi.gif
 
测试22211行数据,大约6秒钟分配完毕(我的机器,普通pc机,winxp,内存 512 DDR,CPU C 1.7GHz)
 
我想不出来更快的方法了
 
他们的速度己很快了
 
效果很好,多谢了纯粹新手朋友,厉害
 
后退
顶部