2014-01-31 134 views
1

如果您的列表框中包含许多项目,并且您需要选择例如项目,则对项目的选择会产生痛苦的工作。通过手动点击和选择400个项目。 有没有一种优雅的方式来从列表框中使用特定的“通过模式功能选择项目”来选择项目?TListbox,根据模式选择项目

+1

不,没有。 – TLama

+0

这意味着,获取字符串,并分析这个字符串列表? – Franz

+1

如果您需要在列表框中手动选择400个项目,则需要仔细查看用户界面设计。 –

回答

3

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

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; 

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

+0

'TFunc '=='SysUtils.TPredicate ';-)但是,我会允许零过滤器或至少会检查它 –