Mar*_*unu 2 delphi listview delphi-2009
我有一个TListView在vsReport可见群体风格.这些组按创建顺序显示.但是我想制作两个按钮(向上和向下)并将所选组移动到另一个位置(在运行时).可能吗 ?
您可以通过更改Index组项的属性来执行此操作.以下代码演示了用法:
procedure TForm1.btnMoveUpClick(Sender: TObject);
var
itm: TListItem;
i: Integer;
begin
itm := ListView1.Selected;
if Assigned(itm) then
for i := 0 to ListView1.Groups.Count - 1 do
if ListView1.Groups[i].GroupID = itm.GroupID then
begin
if ListView1.Groups[i].Index > 0 then
ListView1.Groups[i].Index := ListView1.Groups[i].Index - 1;
break;
end;
end;
procedure TForm1.btnMoveDownClick(Sender: TObject);
var
itm: TListItem;
i: Integer;
begin
itm := ListView1.Selected;
if Assigned(itm) then
for i := 0 to ListView1.Groups.Count - 1 do
if ListView1.Groups[i].GroupID = itm.GroupID then
begin
if ListView1.Groups[i].Index < ListView1.Groups.Count - 1 then
ListView1.Groups[i].Index := ListView1.Groups[i].Index + 1;
break;
end;
end;
Run Code Online (Sandbox Code Playgroud)
脚注:当然,这可以(应该)重构如下:
function GetGroupFromGroupID(AListView: TListView; AGroupID: integer): TListGroup;
var
i: Integer;
begin
for i := 0 to AListView.Groups.Count - 1 do
if AListView.Groups[i].GroupID = AGroupID then
Exit(AListView.Groups[i]);
result := nil;
end;
procedure TForm1.btnMoveUpClick(Sender: TObject);
var
itm: TListItem;
grp: TListGroup;
begin
itm := ListView1.Selected;
if Assigned(itm) then
begin
grp := GetGroupFromGroupID(ListView1, itm.GroupID);
if Assigned(grp) and (grp.Index > 0) then
grp.Index := grp.Index - 1;
end;
end;
procedure TForm1.btnMoveDownClick(Sender: TObject);
var
itm: TListItem;
grp: TListGroup;
begin
itm := ListView1.Selected;
if Assigned(itm) then
begin
grp := GetGroupFromGroupID(ListView1, itm.GroupID);
if Assigned(grp) and (grp.Index < ListView1.Groups.Count - 1) then
grp.Index := grp.Index + 1;
end;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |