我是这样的:procedure TfmReplace.btnUpClick(Sender: TObject);
var
iIndex: integer;
strTemp1,strTemp2: String;
begin
//上移
//办法很笨,麽办法,对ListView的方法还不是很熟悉
if (not(ListView1.SelCount>0)) then
ShowMessage('请选择优先执行的规则!')
else if not(ListView1.Selected.Index=0)
then begin
iIndex:=ListView1.Selected.Index-1;
strTemp1:=ListView1.Items.Item[iIndex].Caption;
strTemp2:=ListView1.Items.Item[iIndex].SubItems[0];
ListView1.Items.Item[iIndex].Caption:= ListView1.Selected.Caption;
ListView1.Items.Item[iIndex].SubItems[0]:= ListView1.Selected.SubItems[0];
ListView1.Selected.Caption:=strTemp1;
ListView1.Selected.SubItems[0]:= strTemp2;
// ListView1.Items.Item[iIndex].Selected;
end;end;
procedure TfmReplace.btnDownClick(Sender: TObject);
var
iIndex: Integer;
strTemp1,strTemp2:String;
begin
//下移
if (not(ListView1.SelCount>0)) then
ShowMessage('请选择延后执行的规则!')
else if not(ListView1.Selected.Index=ListView1.Items.Count-1)
then begin
iIndex:=ListView1.Selected.Index+1;
strTemp1:=ListView1.Items.Item[iIndex].Caption;
strTemp2:=ListView1.Items.Item[iIndex].SubItems[0];
ListView1.Items.Item[iIndex].Caption:= ListView1.Selected.Caption;
ListView1.Items.Item[iIndex].SubItems[0]:= ListView1.Selected.SubItems[0];
ListView1.Selected.Caption:=strTemp1;
ListView1.Selected.SubItems[0]:= strTemp2;
// ListView1.Items.Item[iIndex].Selected;
end;
end;
不知道各位兄弟怎么实现的,有没有更好的办法,抛砖引玉一下.
1)向上移动整行
void __fastcall TF_testdefinitioneditor::sbUpClick(TObject *Sender)
{
List->SetFocus();
TListItem *pSelectedItem = List->Selected;
if (pSelectedItem != NULL)
{
int selectedindex = pSelectedItem->Index;
if (selectedindex > 0)
{
TListItem *pUpItem = List->Items->Item[selectedindex - 1];
AnsiString strTemp;
strTemp = pSelectedItem->Caption;
pSelectedItem->Caption = pUpItem->Caption;
pUpItem->Caption = strTemp;
strTemp = pUpItem->SubItems->Strings[0];
pUpItem->SubItems->Strings[0] = pSelectedItem->SubItems->Strings[0];
pSelectedItem->SubItems->Strings[0] = strTemp;
strTemp = pUpItem->SubItems->Strings[1];
pUpItem->SubItems->Strings[1] = pSelectedItem->SubItems->Strings[1];
pSelectedItem->SubItems->Strings[1] = strTemp; List->Selected = pUpItem;
pUpItem->Focused = true;
pUpItem->MakeVisible(true);
} }
}2)向下移动整行
void __fastcall TF_testdefinitioneditor::sbDownClick(TObject *Sender)
{
List->SetFocus();
TListItem *pSelectedItem = List->Selected;
if (pSelectedItem != NULL)
{
int selectedindex = pSelectedItem->Index;
int itemcount = List->Items->Count;
if (selectedindex < itemcount - 1)
{
TListItem *pDownItem = List->Items->Item[selectedindex + 1];
AnsiString strTemp; strTemp = pSelectedItem->Caption;
pSelectedItem->Caption = pDownItem->Caption;
pDownItem->Caption = strTemp; strTemp = pDownItem->SubItems->Strings[0];
pDownItem->SubItems->Strings[0] = pSelectedItem->SubItems->Strings[0];
pSelectedItem->SubItems->Strings[0] = strTemp; strTemp = pDownItem->SubItems->Strings[1];
pDownItem->SubItems->Strings[1] = pSelectedItem->SubItems->Strings[1];
pSelectedItem->SubItems->Strings[1] = strTemp; List->Selected = pDownItem;
pDownItem->Focused = true;
pDownItem->MakeVisible(true);
} }
}
我那个办法,只要移动一行后,选定的Items就不是原来操作的对象了。
简言之,不能连续移动,必须移动一行后,再选定它,然后才能再移动。
先谢谢楼上2位兄弟。
var
idex: Integer;
TmpList1, TmpList2, TmpupList: TListItem;
begin
TmpList1 := LtView.Selected;
if TmpList1 = nil then Exit;
idex := TmpList1.Index;
if idex = 0 then Exit;
TmpList2 := LtView.Items[idex - 1];
LtView.Items.BeginUpdate;
try
TmpupList := LtView.Items.Add;
TmpupList.Assign(TmpList1);
TmpList1.Assign(TmpList2);
TmpList2.Assign(TmpupList);
TmpList2.Selected := True;
LtView.SetFocus;
finally
TmpupList.Delete;
LtView.Items.EndUpdate;
end;
end;
//下移
var
idex, iCount: Integer;
TmpList1, TmpList2, TmpdwList: TListItem;
begin
TmpList1 := LtView.Selected;
if TmpList1 = nil then Exit;
idex := TmpList1.Index;
iCount := LtView.Items.Count - 1;
if idex = iCount then Exit;
TmpList2 := LtView.Items[idex + 1];
LtView.Items.BeginUpdate;
try
TmpdwList := LtView.Items.Add;
TmpdwList.Assign(TmpList1);
TmpList1.Assign(TmpList2);
TmpList2.Assign(TmpdwList);
TmpList2.Selected := True;
LtView.SetFocus;
finally
TmpdwList.Delete;
LtView.Items.EndUpdate;
end;
end;
List->Selected = pDownItem;
pDownItem->Focused = true;,再加50分结帖。盛情感谢各位兄弟帮忙。