Delphi 控件ComboBox的问题
我想用COMBOBOX控件获取指定文件夹下的指定后缀名文件,例如文本文件,当新添加一个文本文件,下次启动程序,点下COMBOBOX下拉框,都能够全部显示指定文件夹下的所有...
我想用COMBOBOX控件获取指定文件夹下的指定后缀名文件,例如文本文件,当新添加一个文本文件,下次启动程序,点下COMBOBOX下拉框,都能够全部显示指定文件夹下的所有文本文件,或加多一个按钮刷新一下,就能全部显示出来.请问该如何实现,如何写代码.如果知道的请详细写出...
展开
展开全部
其实主要就是个遍历文件夹操作。
{-------------------------------------------------------------------------------
过程名: MakeFileList 遍历文件夹及子文件夹
参数: Path,FileExt:string 1.需要遍历的目录 2.要遍历的文件扩展名
返回值: TStringList
Eg:ListBox1.Items:= MakeFileList( 'E:\指定的文件路径','.exe') ;
ListBox1.Items:= MakeFileList( 'D:\指定的文件路径','.*') ;
-------------------------------------------------------------------------------}
function MakeFileList(Path,FileExt:string):TStringList ;
var
sch:TSearchrec;
begin
Result:=TStringlist.Create;
if rightStr(trim(Path), 1) <> '\' then
Path := trim(Path) + '\'
else
Path := trim(Path);
if not DirectoryExists(Path) then
begin
Result.Clear;
exit;
end;
if FindFirst(Path + '*', faAnyfile, sch) = 0 then
begin
repeat
Application.ProcessMessages;
if ((sch.Name = '.') or (sch.Name = '..')) then Continue;
if DirectoryExists(Path+sch.Name) then
begin
Result.AddStrings(MakeFileList(Path+sch.Name,FileExt));
end
else
begin
if (UpperCase(extractfileext(Path+sch.Name)) = UpperCase(FileExt)) or (FileExt='.*') then
Result.Add(Path+sch.Name);
end;
until FindNext(sch) <> 0;
SysUtils.FindClose(sch);
end;
end;
首先你是要把符合条件的文件列放到哪呢?列表框或者文本中?不管怎么样都要用到字符串列表,ComboBox.items.add('.txt')可以添加 后缀,好像是items吧,具体你可以用ctrl+空格或者ctrl+鼠标左键 看看里面的方法,添加了想要的下拉内容后,选择了这个后缀,然后你点击某个键,将你的想要查询的文件夹路径 ,combobox.text 当作参数传给那个函数,结果保存在先前申请的字符串列表中,再后续操作吧
{-------------------------------------------------------------------------------
过程名: MakeFileList 遍历文件夹及子文件夹
参数: Path,FileExt:string 1.需要遍历的目录 2.要遍历的文件扩展名
返回值: TStringList
Eg:ListBox1.Items:= MakeFileList( 'E:\指定的文件路径','.exe') ;
ListBox1.Items:= MakeFileList( 'D:\指定的文件路径','.*') ;
-------------------------------------------------------------------------------}
function MakeFileList(Path,FileExt:string):TStringList ;
var
sch:TSearchrec;
begin
Result:=TStringlist.Create;
if rightStr(trim(Path), 1) <> '\' then
Path := trim(Path) + '\'
else
Path := trim(Path);
if not DirectoryExists(Path) then
begin
Result.Clear;
exit;
end;
if FindFirst(Path + '*', faAnyfile, sch) = 0 then
begin
repeat
Application.ProcessMessages;
if ((sch.Name = '.') or (sch.Name = '..')) then Continue;
if DirectoryExists(Path+sch.Name) then
begin
Result.AddStrings(MakeFileList(Path+sch.Name,FileExt));
end
else
begin
if (UpperCase(extractfileext(Path+sch.Name)) = UpperCase(FileExt)) or (FileExt='.*') then
Result.Add(Path+sch.Name);
end;
until FindNext(sch) <> 0;
SysUtils.FindClose(sch);
end;
end;
首先你是要把符合条件的文件列放到哪呢?列表框或者文本中?不管怎么样都要用到字符串列表,ComboBox.items.add('.txt')可以添加 后缀,好像是items吧,具体你可以用ctrl+空格或者ctrl+鼠标左键 看看里面的方法,添加了想要的下拉内容后,选择了这个后缀,然后你点击某个键,将你的想要查询的文件夹路径 ,combobox.text 当作参数传给那个函数,结果保存在先前申请的字符串列表中,再后续操作吧
展开全部
1楼回答已经很好的解决楼主问题了,
你那个刷新按钮只要在点击的时候先把ComboBox清空,再把1楼函数返回的结果显示到ComboBox中就可以了。
在Uses中多加一个单元StrUtils的引用
刷新按钮的全部代码改成这样:
procedure TForm1.Button4Click(Sender: TObject);
var
list: TStrings;
begin
chbU.Clear;
list := MakeFileList('e:\', '.*');
try
chbU.Items.Text := list.Text;
finally
list.Free;
end;
end;
再把: Result.AddStrings(MakeFileList(Path+sch.Name,FileExt));
这句注释掉,这样就符合你的要求了,
你那个刷新按钮只要在点击的时候先把ComboBox清空,再把1楼函数返回的结果显示到ComboBox中就可以了。
在Uses中多加一个单元StrUtils的引用
刷新按钮的全部代码改成这样:
procedure TForm1.Button4Click(Sender: TObject);
var
list: TStrings;
begin
chbU.Clear;
list := MakeFileList('e:\', '.*');
try
chbU.Items.Text := list.Text;
finally
list.Free;
end;
end;
再把: Result.AddStrings(MakeFileList(Path+sch.Name,FileExt));
这句注释掉,这样就符合你的要求了,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询