我想通过点击右键按钮N24,从而添加imagelist3中的第1个图标于listview2中符合第八项中头二位是’13‘开头的数据行中,我的代码是这样的写的但是却无法得到正确的结果,所有的行都显示这个图标
procedure Tmainpagefrm.N24Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to listview2.Items.Count-1 do
if copy((listview2.Items[i].SubItems.Strings[7]),1,2)='13' then
   gitem:=listview2.Items.Add;
   listview2.SmallImages:=imagelist3;
   listview2.Items[i].ImageIndex:=0;
end;
不知是错在那,请专家指点一二,在线急待!!!,如能解决,另帖给高分

解决方案 »

  1.   

    没仔细看是不是应该加个begin..end?
      

  2.   

    默认为ListView各项的ImageIndex是为0的,所以楼主需要先将所有项该值置为-1
      

  3.   

    循环我看不出有什么错误,for先取要遍历所有数据行和次数,在取得数据行行之后if判断是否符合条件,如果条件成立,即在该行第一列中加入图标以作标示,如果条件不成立,则检测下一行的数据,有问题吗?如果改成用repeat来循环的话,我不知道listview最一行的属性值是用什么来表示,有那一位知的人能顺便的告诉我一下吗
      

  4.   

    for i:=0 to listview2.Items.Count-1 do
        if copy((listview2.Items[i].SubItems.Strings[7]),1,2)='13' then
          gitem:=listview2.Items.Add;你看不出自己的逻辑乱吗。
    你的循环这里没意义,无论怎样,最后i都是要循环到终点,改成这样:
    第8项,是不是应该是SubItems[6].
      listview2.SmallImages:=imagelist3;
      for i:=0 to listview2.Items.Count-1 do
        if copy(listview2.Items[i].SubItems[6],1,2)='13' then
        begin
          gitem:=listview2.Items.Add;
          listview2.Items[i].ImageIndex:=0;
        end else
          listview2.Items[i].ImageIndex:=-1;
    /////////////////////
    也太吝啬了吧,一分也没。
      

  5.   


    gitem:=listview2.Items.Add;惹的祸,因为每出现一个'13',都会执行一次,这样ListView就增加了很多空的行。
    你可以看看22行后面多了几行图标,就是上面有几个'13'的数据。
    var
        bShowIcon:boolean;
    ......procedure .....
    ...
    begin
        bShowIcon:=not bShowIcon;
        listview1.SmallImages:=imagelist1;
        for i:=0 to listview1.Items.Count-1 do
            if copy(listview1.Items[i].SubItems[1],1,2)='33' then
            begin
    //            gitem:=listview1.Items.Add;
                if bShowIcon then
                    listview1.Items[i].ImageIndex:=0
                else
                    listview1.Items[i].ImageIndex:=-1
            end else
                listview1.Items[i].ImageIndex:=-1;