我使用ListView时在form的ONSHOW事件中对LISTVIEW控件添加内容和设置行高及列宽都正常,但是窗体显示后,再次对LISTVIEW进行内容清除和重新填充时行高就不受约束了,是什么原因。
我在FORMSHOW事件中使用:ListView_SetIconSpacing(ListView1.Handle,64,64);可以设置其行高和列宽,都是正常显示出来的,在窗体显示后,通过点击相关控件对LISTVIEW内容进行改动,重新填充时,每行的行距一下变的很大了,程序内容与FORMSHOW时写的是一样的,也包括ListView_SetIconSpacing(ListView1.Handle,64,64)这句,为什么这时就不起作用了呢?

解决方案 »

  1.   

    TListView 行高不由你控制的不过有个技巧,你把ListView的SmallImages指向TImageList空间,然后通过调整TImageList的Height,就可以调整ListView的Height了,如果你不想显示
    小图标,把TImageList的Width调整为0,就可以了
    begin
      ListView1.SmallImages:=ImageList1;
      ImageList1.Height:=20;   //<=此处调整ListView1的行高
      ImageList1.Width:=0;
    end;
      

  2.   

    我使用的IMAGELIST里存的是大图,LISTVIEW我设置的是LARGEIMAGES=IMAGELIST  
    而且我使用ListView_SetIconSpacing(ListView1.Handle,64,64)是好用的,至少在FORMSHOW里面加上它以后是受控的,只是再次人工重设内容时就不起作用了。
    你说的方法我早就查到了,对我没有用。不然也不会发贴了。
      

  3.   

    我的印象中LISTVIEW的行高是受其中的字的大小决定的,所以可以设置一下字体
      

  4.   

    begin
      ListView1.SmallImages:=ImageList1;
      ImageList1.Height:=20;   //<=此处调整ListView1的行高
      ImageList1.Width:=0;
    end;
      

  5.   

    没人知道吗?为什么LISTVIEW的行高变的很大了,开始是正常的,只是重新填充了一下内容啊。
    别告诉我ListView1.SmallImages:=ImageList1的方法,我用的是largeimages:=imagelist1
      

  6.   

    我这里是可以显示的,试试吧:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ImgList, ExtCtrls, RzPanel, ComCtrls;type
      TForm1 = class(TForm)
        ListView1: TListView;
        RzStatusBar1: TRzStatusBar;
        ImageList1: TImageList;
        Button1: TButton;
        Edit1: TEdit;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses
      commctrl;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      i: SmallInt;
    begin
      ListView1.Items.BeginUpdate;
      ListView_SetIconSpacing(ListView1.Handle, StrToIntDef(Edit1.Text, 32), StrToIntDef(Edit1.Text, 32));
      ListView1.Items.Clear;
      for i:=0 to 9 do
        with ListView1.Items.Add do
        begin
          Caption := 'Item ' + IntToStr(i + 1);
          ImageIndex := i * 2;
        end;
      ListView1.Items.EndUpdate;
    end;end.
      

  7.   

    我的程序和你写的基本上一样的,只是开头和结尾没加BeginUpdate和EndUpdate我按你说的方法在开头加上ListView1.Items.BeginUpdate;结尾加上ListView1.Items.EndUpdate;可是加上这两句以后更完了,干脆没有图标了,图标不显示了.不知道是什么原因?这两句不加不行吗?有什么用啊?
      

  8.   

    TO: GOBIZ
    不好意思,是我没注意,我的程序中段有一个判断,一旦满足条件就会直接EXIT,所以相当于没有执行ENDUPDATE,仅执行了BEGINUPDATE,呵呵,改过来以后就好了。目前一切正常了。
    你太牛了,多谢你啊!
      

  9.   

    总结:
       行高发生变化的解决办法就是在重新填充内容和显示标志时,开头和结尾一定要加上BEGINUPDATE和ENDUPDATE        ListView1.Items.BeginUpdate
    ....................
            ListView1.Items.EndUpdate;