Hola,
No creas que soy un experto en el component "ListView", pero, en fin, he modificado el ejemplo anterior de manera que ahora evita que puedan añadirse elementos duplicados en la lista "de la derecha", y, por otro lado, elimina los elementos que se añadan a esta desde la lista "de la izquierda". Puedes descargar el ejemplo desde el siguiente enlace:
ListViewSample2.zip
Para lo primero he preparado esta función, que, igual puede mejorarse:
Código Delphi
[-]
function TMainForm.ItemExistsOnTheList( item : TListItem ) : boolean;
var
i : integer;
begin
result := false;
for i := 0 to RightListView.Items.Count - 1 do
begin
if RightListView.Items[ i ].Caption = item.Caption then
begin
result := true;
break;
end;
end;
end;
Como ves, pasando un elemento a la función (el elemento de la lista de la izquierda que quiere añadirse a la lista de la derecha) se recorre la lista de la derecha para ver si ya existe o no. En este caso determinamos si existe o no el elemento utilizando su "Caption". Esta función es utilizada en la "acción" que se usa para añadir elementos desde la lista de la izquierda a la lista de la derecha. Este método también se ha modificado, de manera que ahora se elimina el elemento de la lista de la izquierda, si es que este se termina añadiendo a la lista de la derecha:
Código Delphi
[-]
procedure TMainForm.MoveListItemActionExecute(Sender: TObject);
var
i : integer;
begin
for i := LeftListView.Items.Count - 1 downto 0 do
begin
if LeftListView.Items[ i ].Selected then
begin
if not Self.ItemExistsOnTheList( LeftListView.Items[ i ] ) then
begin
with RightListView.Items.Add do
begin
Caption := LeftListView.Items[ i ].Caption;
SubItems.Add( LeftListView.Items[ i ].SubItems[ 0 ] );
end;
LeftListView.Items.Delete( i );
end;
end;
end;
end;