主题:[原创]combobox控件里的items怎么动态读取文本文件
freewolf
[专家分:30] 发布于 2006-07-15 15:02:00
procedure TForm1.N2Click(Sender: TObject);
var
f1:TextFile;
FileName,TmpStr,AllStr:String;
begin
FileName:='pingwei.txt'; //打开指定文件
AssignFile(F1,FileName);
Reset(F1);
AllStr:='';//利用循环将F1的文件内容显示
While not Eof(F1) do begin
Readln(F1,TmpStr);
//为每一行之间加入换行符号
AllStr:=AllStr+TmpStr+ #10;
end;
//关闭文件
CloseFile(F1);
//显示文件的所有内容
ShowMessage(AllStr);
end;
======================================
我已经把'pingwei.txt读入程序中,
现在我想把该文本文件内容如下:
张三
李四
王五
赵二
王八
动态读入combobox的items里。
如何实现?
回复列表 (共12个回复)
沙发
wealthy [专家分:1840] 发布于 2006-07-15 15:34:00
procedure Tselect.Button1Click(Sender: TObject);
var
f1:TextFile;
FileName,TmpStr,AllStr:String;
begin
FileName:=''pingwei.txt'; //打开指定文件
AssignFile(F1,FileName);
Reset(F1);
AllStr:='';//利用循环将F1的文件内容显示
While not Eof(F1) do begin
Readln(F1,TmpStr);
//为每一行之间加入换行符号
AllStr:=TmpStr+ #10;
ComboBox1.Items.Add(AllStr);
end;
//关闭文件
CloseFile(F1);
//显示文件的所有内容
end;
板凳
freewolf [专家分:30] 发布于 2006-07-15 15:40:00
items显示如下了:
张三
张三李四
张三李四王五
张三李四王五赵二
张三李四王五赵二王八
还是有点小小的问题
3 楼
wealthy [专家分:1840] 发布于 2006-07-15 15:44:00
请详细看清我的代码
4 楼
freewolf [专家分:30] 发布于 2006-07-15 15:49:00
十分感谢您了!您的代码没有任何问题,我粗心所造成。
开始没有注意"AllStr:=AllStr+TmpStr+ #10;"
5 楼
freewolf [专家分:30] 发布于 2006-07-15 16:00:00
能进一步问您一个问题吗?
如何把读入的文本文件每行做为一个值,动态地在程序中为各自添加一个label组件和一个Edit组件,该组件名称为文本文件的每一行的值。(比如评委1在label1上显示,对应一个edit1来输入他打的分,评委2在label2上显示,对应一个edit2来输入他打的分.....依此类推,直到文本文件结束)。
6 楼
wealthy [专家分:1840] 发布于 2006-07-15 16:11:00
TComboBox有个.Items[i]值属性可以代表ComboBox1每行的值,如
ComboBox1.Items[0]是第1行的值;
ComboBox4.Items[1]是第2行的值;
如此来推
Label1.Caption:= ComboBox1.Items[0];
Edit1.text:=ComboBox1.Items[0];
7 楼
freewolf [专家分:30] 发布于 2006-07-15 16:32:00
我的意思是根据读入的评委自动态地添加label和edit,不是事先创建好label和edit再给其赋值。
8 楼
wealthy [专家分:1840] 发布于 2006-07-15 20:49:00
如果真正要实现你讲的功能,我认为很难,因为要考虑如下问题:
1、先将*.txt的内容生成添加到一个临时的TMemo.text中;
2、判断Tmemo中有多少行,后确定生成多少个label和edit;
3、判断Tmemo中的第一行,生成第一个label和edit;
4、判断Tmemo中的next下一行,循环生成下一个label和edit;至最后行
5、在显示动态生成的个label和edit和窗口中对各个label和edit的属性进行动态设置;
6、动态生成一个label和edit控件的方法是:
procedure Tselect.Button6Click(Sender: TObject);
var
edit1:Tedit;
Lb:TLabel;
begin
edit1:=TEdit.Create(Self);
edit1.Parent:=Self;
edit1.Left:=80;
edit1.top:=312;
edit1.Text:='你给它赋值';
begin
Lb:=TLabel.Create(Self);
Lb.Parent:=Self;
Lb.Left:=80;
Lb.top:=350;
end;
end;
9 楼
wealthy [专家分:1840] 发布于 2006-07-15 21:34:00
一个笨方法:
procedure TForm2.Button1Click(Sender: TObject);//动态生成控件按钮
var
f1:TextFile;
FileName,S:String;
i:integer;
memo:TMemo;
ed1,ed2,ed3,ed4,ed5,ed6,ed7,ed8,ed9,ed10:Tedit;
Lb1,Lb2,Lb3,Lb4,Lb5,Lb6,Lb7,Lb8,Lb9,Lb10:TLabel;
begin
i:=25;
memo:=TMemo.Create(Owner);//创建一个临时的文本控件,用来临时记录'123.txt'的内容
memo.Parent:=self;
memo.Visible:=false;
FileName:='123.txt'; //打开指定文件
AssignFile(F1,FileName);
Reset(F1);
while not Eof(F1) do
begin
ReadLn(F1, s);
Memo.Lines.Add(s);//得到行数
end;
begin
ed1:=TEdit.Create(Self);//创建Edit1
ed1.Parent:=Self;
ed1.Left:=i+40;
ed1.top:=i;
ed1.Text:='98.5';//
begin
Lb1:=TLabel.Create(Self);//创建Label1
Lb1.Parent:=Self;
Lb1.Left:=i;
Lb1.top:=i;
Lb1.Caption:=memo.Lines[0]+':';
Lb1.Width:=48;
end;
begin
ed2:=TEdit.Create(Self);
ed2.Parent:=Self;
ed2.Left:=i+40;
ed2.top:=i+40;
ed2.Text:='88.1';
begin
Lb2:=TLabel.Create(Self);
Lb2.Parent:=Self;
Lb2.Left:=i;
Lb2.top:=i+45;
Lb2.Caption:=memo.Lines[1]+':';
Lb2.Width:=48;
end;
begin
//edit3-10自己加同上,注意控件的属性
//Label3-10自己加同上,注意控件的属性
end;
begin
memo.Free;
CloseFile(F1);
end;
end;
end;
end;
10 楼
freewolf [专家分:30] 发布于 2006-07-15 22:46:00
我的代码如下:
procedure TForm1.N3Click(Sender: TObject);
var
f11:TextFile;
FileName1,TmpStr1, AllStr1:String;
begin
end;
procedure TForm1.N7Click(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1.N1Click(Sender: TObject);
var
i:integer;//评委个数
j:integer;//项目个数
f1,f11:TextFile;
FileName,TmpStr,AllStr,FileName1,TmpStr1,AllStr1:String;
PingweiName:Array of TEdit;
k:Integer;
begin
i:=0;
FileName:='pingwei.txt';
AssignFile(F1,FileName);
Reset(F1);
AllStr:='';
While not Eof(F1) do begin
Readln(F1,TmpStr);
AllStr:=TmpStr;
i:=i+1;
StatusBar1.Panels[1].Text :='此次评分评委有:'+inttostr(i); //读取评委个数到statusbar
////////////////////////////////////////
///////动态添加lable和Edit组件//////////
////////////////////////////////////////
////////////////////////////////////////
///////动态添加lable和Edit组件//////////
////////////////////////////////////////
end;
//关闭文件
CloseFile(F1);
//////////////////////////////////////////////////////////////////////////////////////////
SetLength(PingweiName, i);// 设置i个(即多少个评委添加多少个Edit)TEdit对象
for k:=0 to i-1 do begin
PingweiName[k]:=TEdit.Create(Self);
PingweiName[k].Parent:=form1;
PingweiName[k].Left:=k mod 2+50;
PingweiName[k].Top:=150+(k mod 5)*100;;
PingweiName[k].Height:=22;
PingweiName[k].Width:=80;
PingweiName[k].Color:=$FFFFFF;
PingweiName[k].Text:= '';
/////////////////////////////////////////////////
//for k:=0 to i-1 do begin
//PingweiName[k].Free;
end;
///////////////////////////////////////////////////////////////////////////////////////////
j:=0;
FileName1:='xiangmu.txt';
AssignFile(F11,FileName1);
Reset(F11);
AllStr1:='';
While not Eof(F11) do begin
Readln(F11,TmpStr1);
AllStr1:=TmpStr1;
j:=j+1;
StatusBar1.Panels[0].Text :='此次评分项目有:'+inttostr(j); //读取项目个数到statusbar
ComboBox1.Items.Add(AllStr1); //把读入的文本文件读入combobox组件
end;
//关闭文件
CloseFile(F11);
end;
======================================================================
现在控制组件的位置反而成了问题,呵,算的方法老不对,还在考虑。
SetLength(PingweiName, i);// 设置i个(即多少个评委添加多少个Edit)TEdit对象
for k:=0 to i-1 do begin
PingweiName[k]:=TEdit.Create(Self);
PingweiName[k].Parent:=form1;
PingweiName[k].Left:=k mod 2+50;
PingweiName[k].Top:=150+(k mod 5)*100;;
PingweiName[k].Height:=22;
PingweiName[k].Width:=80;
PingweiName[k].Color:=$FFFFFF;
PingweiName[k].Text:= '';
++++++++++++++++++++++++++++++++++++++++++++++++++++
其实就想学学这些组件的用法,挑战下自己,这个用excel一个公式就可以搞定的事:(
您和我一起思考,谢谢了哦。
学习论坛和别的论坛不一样的地方就是人都有一种热情,少了一份苛刻。
我来回复