begin process at 2010 02 10 09:10:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Système

 > 

Exécution

 > 

Intervertir deux lignes d'un ListView


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Intervertir deux lignes d'un ListView

jeudi 16 octobre 2008 à 09:21:48 | Intervertir deux lignes d'un ListView

informatixo

Membre Club
Bonjour le forum,

J'ai un petit souci avec le code suivant :

procedure TForm2.Button1Click(Sender: TObject);
var
  ItemTampon: TListItem;

begin
  ItemTampon := ListView1.Items[1];
  ListView1.Items[1] := ListView1.Items[0];
  ListView1.Items[0] := ItemTampon;
end;

Le problème avec ce code c'est que j'ai deux fois la même ligne dans le ListView après l'inversion.

Dès que la deuxième instruction est passée, "ItemTampon" prend aussi la nouvelle valeur. Ce qui me fait dire que c'est c'est n'est pas une affectation de valeur mais de référence, j'ai l'impression que "ItemTampon" pointe vers la valeur de "ListView1.Items[1]".

Quelqu'un pourrait-il me venir en aide SVP ? Je n'arrive pas à retrouver le message du forum qui expliquait le mécanisme pour copier en valeur et non par référence.

Je vous remercie par avance et bonne journée.

Que la force soit avec vous !
jeudi 16 octobre 2008 à 18:52:40 | Re : Intervertir deux lignes d'un ListView

cantador

Membre Club
bonsoir,
ça nous dit pas ce que tu veux faire !

cantador
jeudi 16 octobre 2008 à 20:34:33 | Re : Intervertir deux lignes d'un ListView

cirec

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Salut,

essaye comme ça:

var aItem: TListItem;
begin
  aItem := TListItem.Create(ListView1.Items);
  try
    with ListView1 do
    begin
      aItem.Assign(Items[0]);
      Items.BeginUpdate;
      Items[0] := Items[1];
      Items[1] := aItem;
      Items.EndUpdate;
    end;
  finally
    aItem.Free;
  end;
end;


 
@+
Cirec

jeudi 16 octobre 2008 à 23:17:23 | Re : Intervertir deux lignes d'un ListView

informatixo

Membre Club
Je suis désolé si je n'ai pas été assez clair mais je crois que cirec a compris ce que je voulais faire.

Imaginons que j'ai une simple ListView avec deux colonnes et trois lignes, je veux pouvoir intervertir deux lignes en cliquant sur un bouton par exemple. Ceci est un problème simpliste mais il me permettras de régler mon problème plus complexe.

Cirec ton code fonctionne parfaitement. De mon côté j'avais essayé avec le "Create" mais comme je ne faisait pas le "Assign" après ça ne marchait pas.

Quelqu'un pourrait-il m'expliquer pourquoi même après un "Create" l'instruction "ItemTampon := ListView1.Items[1];" ne fonctionne pas comme une affectation de variable traditionnelle et qu'il faut impérativement faire un "Assign" ? En effet, si je change "ListView1.Items[1]" à l'instruction suivante et bien "ItemTampon" change aussi alors que si je prend l'exemple suivant ça fonctionne :

var
  a, b: Integer;

begin
  b := 5;
  a := b;
  b := 7;
  ShowMessage(IntToStr(a)); // Ici a vaut bien 5 et non pas 7.
end;

Certes mon problème est résolu mais je souhaite, ne serais-ce que pour progresser, avoir une réponse à cette dernière question ou du moins une piste pour que je puisse trouver le pourquoi du comment.

En attendant, un grand merci à tous les deux pour votre aide et bonne continuation à tous..

A plus.

Que la force soit avec vous !
vendredi 17 octobre 2008 à 11:19:22 | Re : Intervertir deux lignes d'un ListView

cantador

Membre Club

Je suis désolé si je n'ai pas été assez clair...

Non, non en fait, le titre est réservé au thème et la question doit-être formulée dans le corps du message et du coup j'en ai oublié le titre..
Mais comme cirec, un p'ti gars tout frêle, menu, pauvre et désoeuvré a vu de la lumière allumée il est entré et a pris une bière (lol)

Et il a un gros défaut, il trouve en général les bonne réponses et son code fonctionne nickel chrome.

Tu vas bien cirec ?

cantador



Cette discussion est classée dans : valeur, listview, listview1, items, itemtampon


Répondre à ce message

Sujets en rapport avec ce message

insert dasn un listview [ par skiso ] listview1.Items.Insert(0);listview1.Items.Item[0].Caption:='jjjjjj';listview1.Items.Item[0].SubItems.text:='rrr';comment faire pour ecrire dans les au IndexOf d'une ListView et sauvegarde des icônes [ par ActiveX ] Y a t'il quelq'un qui a déjà utilisé l'indexOf d'une Listview.je veux faire un indexof avec un string dans un Listviewvar i: Integer;   begin   i := L listview [ par skiso ] svpje veut savoir comment je peut ecrire dans un listview dans les cases je sais que pour la premier il faut ecrire :listview1.Items.Item[0].SubItems. listview.clear tres lent [ par loursonwinny ] Bonjour,J'ai un petit souci avec le TListView. Lorsque je rajoute 10000 items, j'obtiens un temp d'éxécution tout a fait satisfaisant. Mais lorsque je Largeur colonne listView modifiée en exécution [ par Jean_Jean ] Bonjour,    Je ne suis pas familiarisé avec les Listview et je reconnais que ce sont des composants fascinants. N'ayant pas trouvé de réponse à mon pr Problème changement de valeur listview [ par minouxxxxx ] Bonsoir,Je suis coincé actuellement, je cherche à modifier les items d'une listbox un a un en fonction de valeurs variables qui arrivent par Ethernet Question compliquée : Comment simuler un clic sur une selection en cours dans un Listview [ par vieuxpere ] Bonjour,Je selectionne des items dans mon listView et j'accompli le code suivant :// Supprime l'ensemble des messages selectionnéswith ListView1 do fo Listview(Compter les items) [ par tigrou19 ] Bonjour,Je souhaiterais pouvoir compter les Items de la colonne 5 de ma ListView si celà est possible.Merci. Listview --> Effacer 1 par 1 [ par stailer ] Salut tout le monde !Donc voila mon problème :Je fais une boucle sur chacune des lignes de mon listview... Puis à l'intérieur j'identifie l'index avec Comment choisir la position d'un valeur qu'on ajoute dans l'items d'un tchecklistbox [ par vieuxpere ] Contexte: On ajoute dans un tchecklistbox un ligne dans un items, avec une ligne du type :cklfiles.Items.Insert(0, 'Stop');Question :Comment peut-on c


Nos sponsors


Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,312 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales