我使用ListView时在form的ONSHOW事件中对LISTVIEW控件添加内容和设置行高及列宽都正常,但是窗体显示后,再次对LISTVIEW进行内容清除和重新填充时行高就不受约束了,是什么原因。
我在FORMSHOW事件中使用:ListView_SetIconSpacing(ListView1.Handle,64,64);可以设置其行高和列宽,都是正常显示出来的,在窗体显示后,通过点击相关控件对LISTVIEW内容进行改动,重新填充时,每行的行距一下变的很大了,程序内容与FORMSHOW时写的是一样的,也包括ListView_SetIconSpacing(ListView1.Handle,64,64)这句,为什么这时就不起作用了呢?
我在FORMSHOW事件中使用:ListView_SetIconSpacing(ListView1.Handle,64,64);可以设置其行高和列宽,都是正常显示出来的,在窗体显示后,通过点击相关控件对LISTVIEW内容进行改动,重新填充时,每行的行距一下变的很大了,程序内容与FORMSHOW时写的是一样的,也包括ListView_SetIconSpacing(ListView1.Handle,64,64)这句,为什么这时就不起作用了呢?
小图标,把TImageList的Width调整为0,就可以了
begin
ListView1.SmallImages:=ImageList1;
ImageList1.Height:=20; //<=此处调整ListView1的行高
ImageList1.Width:=0;
end;
而且我使用ListView_SetIconSpacing(ListView1.Handle,64,64)是好用的,至少在FORMSHOW里面加上它以后是受控的,只是再次人工重设内容时就不起作用了。
你说的方法我早就查到了,对我没有用。不然也不会发贴了。
ListView1.SmallImages:=ImageList1;
ImageList1.Height:=20; //<=此处调整ListView1的行高
ImageList1.Width:=0;
end;
别告诉我ListView1.SmallImages:=ImageList1的方法,我用的是largeimages:=imagelist1
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.
不好意思,是我没注意,我的程序中段有一个判断,一旦满足条件就会直接EXIT,所以相当于没有执行ENDUPDATE,仅执行了BEGINUPDATE,呵呵,改过来以后就好了。目前一切正常了。
你太牛了,多谢你啊!
行高发生变化的解决办法就是在重新填充内容和显示标志时,开头和结尾一定要加上BEGINUPDATE和ENDUPDATE ListView1.Items.BeginUpdate
....................
ListView1.Items.EndUpdate;