Deplacer des items dans un listbox [Résolu]

seba31stien 51 Messages postés lundi 13 juin 2005Date d'inscription 25 juillet 2006 Dernière intervention - 25 juil. 2006 à 13:01 - Dernière réponse : f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention
- 26 juil. 2006 à 04:13
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;
Afficher la suite 

5 réponses

Répondre au sujet
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 25 juil. 2006 à 13:20
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ThWilliam
seba31stien 51 Messages postés lundi 13 juin 2005Date d'inscription 25 juillet 2006 Dernière intervention - 25 juil. 2006 à 13:52
0
Utile
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.
Commenter la réponse de seba31stien
Utilisateur anonyme - 25 juil. 2006 à 14:01
0
Utile
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
Commenter la réponse de Utilisateur anonyme
seba31stien 51 Messages postés lundi 13 juin 2005Date d'inscription 25 juillet 2006 Dernière intervention - 25 juil. 2006 à 14:53
0
Utile
merci pour ces conseils
Commenter la réponse de seba31stien
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 26 juil. 2006 à 04:13
0
Utile
// 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;

Commenter la réponse de f0xi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.