回 帖 发 新 帖 刷新版面

主题:[原创]combobox控件里的items怎么动态读取文本文件

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个回复)

沙发

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;

板凳

items显示如下了:
张三
张三李四
张三李四王五
张三李四王五赵二
张三李四王五赵二王八

还是有点小小的问题

3 楼

请详细看清我的代码

4 楼

十分感谢您了!您的代码没有任何问题,我粗心所造成。
开始没有注意"AllStr:=AllStr+TmpStr+ #10;"

5 楼

能进一步问您一个问题吗?
如何把读入的文本文件每行做为一个值,动态地在程序中为各自添加一个label组件和一个Edit组件,该组件名称为文本文件的每一行的值。(比如评委1在label1上显示,对应一个edit1来输入他打的分,评委2在label2上显示,对应一个edit2来输入他打的分.....依此类推,直到文本文件结束)。

6 楼

TComboBox有个.Items[i]值属性可以代表ComboBox1每行的值,如
ComboBox1.Items[0]是第1行的值;
ComboBox4.Items[1]是第2行的值;
如此来推
Label1.Caption:= ComboBox1.Items[0];
Edit1.text:=ComboBox1.Items[0];

7 楼

我的意思是根据读入的评委自动态地添加label和edit,不是事先创建好label和edit再给其赋值。

8 楼

如果真正要实现你讲的功能,我认为很难,因为要考虑如下问题:
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 楼

一个笨方法:
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 楼

我的代码如下:
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一个公式就可以搞定的事:(

您和我一起思考,谢谢了哦。
学习论坛和别的论坛不一样的地方就是人都有一种热情,少了一份苛刻。

我来回复

您尚未登录,请登录后再回复。点此登录或注册