2010-11-23 76 views
0

我需要一种在列表框中搜索并突出显示与搜索到的单词相等的所有单词的方法。如何在列表框中搜索?

有人可以帮助我吗?

+12

而我们需要人们接受他们的问题的答案。据我可以告诉你已经在StackOverflow上提出了7个问题,但你还没有接受一个答案。 – 2010-11-23 10:14:15

回答

2

你的意思是这样的吗?

procedure TForm1.HighLight(aListbox: TListBox; aStr: string); 
var 
    I : integer; 
begin 
    aListbox.ClearSelection; 

    for I := 0 to aListbox.Items.Count-1 do 
    if aListbox.Items[I] = aStr then 
     aListbox.Selected[I] := true; 
end; 

您需要将列表框的MultiSelect属性设置为true才能使其工作。

+0

也许我错了,但我认为通过突出显示他意味着改变单词的背景或字体颜色,而不是选择它。 – 2010-11-23 09:56:29

1

你还没有具体说明你的问题。你需要寻找帮助吗?或者你需要帮助突出显示单词?

对于搜索,你在寻找一个特定的项目在列表框中,或一个单词中的所有项目? 如果你想搜索一个项目,你可以使用TListBox.Items.IndexOf()。 如果要搜索单词,可以使用TListBox.Items.Text上的Pos()或PosEx()函数在整个文本中搜索该单词。或者使用TListBox.Items迭代项目,在每个项目上使用这些函数。

为了突出显示单词,TListBox本身不提供文本高亮显示。如果你需要,你必须自定义绘制它。将其Style属性设置为lbOwnerDrawFixed,然后为OnDrawItem事件编写自定义绘图代码。

3

如果要执行列表框快速搜索,并得到类似的项目或具体项目的索引,解决的办法是这样的

var 
    i : integer; 
    s : string; 
begin 
    s := 'My Text' +#0; 
    i := Lst1.Perform(LB_FINDSTRING, $FFFFFFFF, PWideChar(s)); 
end; 

i是列表框项的指数,这是与你指定的字符串类似。