Deplacer des items dans un listbox [Résolu]

Signaler
Messages postés
51
Date d'inscription
lundi 13 juin 2005
Statut
Membre
Dernière intervention
25 juillet 2006
-
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
-
Bonjour,
j'utilise un composant TUpDown pour déplacer les items d'un listbox. or je n'arrive pas à modifier la propriété itemindex de l'élément sélectionné.
merci pour tout aide
Seb
mon code :
procedure TForm_PersoFH.UPD_POSITION_BONDOnClick(Sender: TObject; Button: TUDBtnType);
var
i_mov : integer;
begin
if (Button=btNext)
then for i_mov:=LBX_CROSSED_BOND.Items.Count-1 downto 0
do if LBX_CROSSED_BOND.Selected[i_mov]
then begin
with LBX_LIST_BOND
do //???? Items.Strings[i_mov].ItemIndex:=Items.Strings[i_mov].ItemIndex-1;
end;
end;

5 réponses

Messages postés
418
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
3
Salut,

Si cela peut t'aider, voici un petit code pour remonter de 1 position l'élément sélectionné.

procedure TForm1.Button1Click(Sender: TObject);
var
    P: integer;
begin
  with ListBox1 do
      if ItemIndex > 0 then
      begin
          P:= ItemIndex -1;
          Items.Move(ItemIndex, P);
          ItemIndex:= P;
      end;
  end;
end;

A +
Thierry
Messages postés
51
Date d'inscription
lundi 13 juin 2005
Statut
Membre
Dernière intervention
25 juillet 2006
1
Merci, ton code remonte ma ligne en première position dans la listbox. Par contre, si j'enlève la ligne :
ItemIndex:= P;
ça fait ce que je recherchais.

Salut,

Seb : il ya pleins de choses qui vont pas dans ton code : c'est mal indexé deja :

procedure TForm_PersoFH.UPD_POSITION_BONDOnClick(Sender: TObject; Button: TUDBtnType);
var
i_mov : integer;
begin
If (Button=btNext) then
For i_mov:=LBX_CROSSED_BOND.Items.Count-1 downto 0 do
If LBX_CROSSED_BOND.Selected[i_mov]then
LBX_LIST_BOND.Items.Strings[i_mov].ItemIndex:=LBX_LIST_BOND.Items.Strings[i_mov].ItemIndex-1;

end;

Ensuite pas besoin de mettre un with do pour 1 ligne de code .
Ensuite ton dernier begin/end est inutile.

Ensuite pour jouer avec les items tu fais (sur la forme) tout ce qu'il ne faut pas faire.

@+

Bon coding
Messages postés
51
Date d'inscription
lundi 13 juin 2005
Statut
Membre
Dernière intervention
25 juillet 2006
1
merci pour ces conseils
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
31
// Faire remonter l'item selectionné dans la liste
procedure TForm1.ButtonUpClick(Sender: TObject);
begin
  with ListBox1 do begin
    if ItemIndex < 1 then exit;
    Items.Exchange(ItemIndex, ItemIndex-1);
  end;
end;

// Faire descendre l'item selectionné dans la liste
procedure TForm1.ButtonDownClick(Sender: TObject);
begin

  with ListBox1 do begin

     if ItemIndex > Count-2 then exit;
     Items.Exchange(ItemIndex, ItemIndex+1);
  end;
end;





avec prise en charge de la multiselection :

procedure TForm1.ButtonUpClick(Sender: TObject);
var i : integer;
begin
  with ListBox1 do begin
     if not multiselect then begin
        if ItemIndex < 1 then exit;
        Items.Exchange(ItemIndex, ItemIndex-1);
     end else
        for i := 0 to Count-1 do
            if Selected[i] then begin
               if I < 1 then exit;
               items.Exchange(i,i-1);
               Selected[i-1] := true;
            end;
  end;
end;

procedure TForm1.ButtonDownClick(Sender: TObject);
var i : integer;
begin
  with ListBox1 do begin
     if not multiselect then begin
        if ItemIndex > Count-2 then exit;
        Items.Exchange(ItemIndex, ItemIndex+1)
     end else
        for i := count-1 downto 0 do
            if Selected[i] then begin
               if I > Count-2 then exit;
               items.Exchange(i,i+1);
               Selected[i+1] := true;
            end;
  end;
end;