Delphi TListbox,根据模式选择项目

Delphi TListbox,根据模式选择项目,delphi,Delphi,如果您的列表框包含许多项目,并且您需要通过手动单击和选择来选择(例如400个项目),则项目的选择将是一项痛苦的工作。 使用特定的“按模式选择项目”功能从列表框中选择项目是否有一种优雅的方法?假设您有可以匹配模式的代码。让我们说它有这个接口: function MatchesPattern(const Value, Pattern: string): Boolean; 然后,您可以使用以下功能选择匹配的所有项目: procedure SelectMatchingItems(ListBox: TL

如果您的列表框包含许多项目,并且您需要通过手动单击和选择来选择(例如400个项目),则项目的选择将是一项痛苦的工作。
使用特定的“按模式选择项目”功能从列表框中选择项目是否有一种优雅的方法?

假设您有可以匹配模式的代码。让我们说它有这个接口:

function MatchesPattern(const Value, Pattern: string): Boolean;
然后,您可以使用以下功能选择匹配的所有项目:

procedure SelectMatchingItems(ListBox: TListBox; const Pattern: string);
var
  i: Integer;
begin
  for i := 0 to ListBox.Count-1 do
    ListBox.Selected[i] := MatchesPattern(ListBox.Items[i], Pattern);
end;
如果准备使用匿名方法,则可以使用谓词

procedure SelectMatchingItems(ListBox: TListBox; 
  const Matches: TFunc<string, Boolean>);
var
  i: Integer;
begin
  for i := 0 to ListBox.Count-1 do
    ListBox.Selected[i] := Matches(ListBox.Items[i]);
end;
选择匹配项的过程(列表框:TListBox;
常量匹配:TFunc);
变量
i:整数;
开始
对于i:=0到ListBox.Count-1 do
ListBox.Selected[i]:=匹配项(ListBox.Items[i]);
结束;

后一种方法是最灵活的,如果您有一个具有足够功能的Delphi,您应该如何解决这个问题。

这意味着,获取字符串并分析这个字符串列表?如果您需要在列表框中手动选择400项,您需要仔细查看您的用户界面设计。@Andy_D Well,这不正是弗兰兹在做的吗?通过允许用户提供模式,他免除了用户手动选择项目的需要。
TFunc
==
SysUtils.t预测
;-)然而,我会允许nil过滤器,或者至少会检查它