gpt4 book ai didi

delphi 和列表框项目的显示

转载 作者:行者123 更新时间:2023-12-03 15:45:52 38 4
gpt4 key购买 nike

我正在使用列表框来显示简单的文件名列表。我还有一个编辑组件,允许我通过简单的方式搜索这些项目:

procedure TForm1.Edit1Change(Sender: TObject);
const
indexStart = -1;
var
search : array[0..256] of Char;
begin
if edit1.Text='' then exit;
StrPCopy(search, Edit1.Text) ;
ListBox1.ItemIndex := ListBox1.Perform(LB_SELECTSTRING, indexStart, LongInt(@search));
end;

现在,有没有一种方法可以“选择性地”在列表框中显示项目?我的意思是,如果我搜索以“hello”开头的项目,那么只会显示那些将 hello 的项目,或者将其调暗,或者使 := false 完全可见。有没有办法用列表框来执行此操作?

谢谢!

哦,这是 Delphi 7...

最佳答案

我总是喜欢这样做(而且我经常这样做):

我有一个字符串数组或一个包含列表框项目的TStringList。然后,在 Edit1Change 中,我清除 Items 属性并仅添加与编辑框中的文本匹配的字符串。

字符串数组

如果您使用字符串数组,例如

var
arr: array of string;

以某种方式初始化,如

procedure TForm1.FormCreate(Sender: TObject);
begin
SetLength(arr, 3);
arr[0] := 'cat';
arr[1] := 'dog';
arr[2] := 'horse';
end;

那么你可以这样做

procedure TForm1.Edit1Change(Sender: TObject);
var
i: Integer;
begin
ListBox1.Items.BeginUpdate;
ListBox1.Items.Clear;
if length(Edit1.Text) = 0 then
for i := 0 to high(arr) do
ListBox1.Items.Add(arr[i])
else
for i := 0 to high(arr) do
if Pos(Edit1.Text, arr[i]) > 0 then
ListBox1.Items.Add(arr[i]);
ListBox1.Items.EndUpdate;
end;

这只会显示数组中包含 Edit1.Text 的字符串;该字符串不需要以Edit1.Text开头。要实现此目的,请替换

Pos(Edit1.Text, arr[i]) > 0

Pos(Edit1.Text, arr[i]) = 1

TStringList

如果是 TStringList,如

var
arr: TStringList;

procedure TForm1.FormCreate(Sender: TObject);
begin
arr := TStringList.Create;
arr.Add('cat');
arr.Add('dog');
arr.Add('horse');
end;

你可以做到

procedure TForm1.Edit1Change(Sender: TObject);
var
i: Integer;
begin
ListBox1.Items.BeginUpdate;
ListBox1.Items.Clear;
if length(Edit1.Text) = 0 then
ListBox1.Items.AddStrings(arr)
else
for i := 0 to arr.Count - 1 do
if Pos(Edit1.Text, arr[i]) = 1 then
ListBox1.Items.Add(arr[i]);
ListBox1.Items.EndUpdate;
end;

区分大小写

上面的代码使用区分大小写的匹配,因此“bo”将不会匹配“Boston”等。为了使代码不区分大小写,可以这样写

if Pos(AnsiLowerCase(Edit1.Text), AnsiLowerCase(arr[i])) > 0 then

而不是

if Pos(Edit1.Text, arr[i]) > 0 then

关于delphi 和列表框项目的显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3240688/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com