我来试试
比较苯的方法,用循环从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.
//这个程序经调试运行没有问题。