Ver Mensaje Individual
  #6  
Antiguo 24-07-2012
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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;
Responder Con Cita