Selection dans listbox ne se fait pas

juliens81 Messages postés 26 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 6 juin 2012 - 28 juil. 2010 à 11:41
juliens81 Messages postés 26 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 6 juin 2012 - 28 juil. 2010 à 14:55
Bonjour,

je fais un deplacement dans une listbox puis j essaye de reselectionner les elements qui l etaient precedemment. Mais ca ne fonctionne pas. Le chanement a bien lieu mais pas la selection.

j ai cherche un peu partout et il est dit sur internet que pour faire une selection on doit faire un selected[index]:=true dans le cas d un multiselect sinon un itemindex:=index.
Mon code est le suivant


for i:=0 to form2.ListBox1.Items.Count-1 do begin
if i<liste_image.Count then begin
for j:=0 to image_selectionnee.Count-1 do begin
if liste_image[i]=image_selectionnee[j] then begin
if form2.ListBox1.MultiSelect then
form2.ListBox1.Selected[i]:=true
else
form2.ListBox1.ItemIndex:=i;
break;
end;
end;
end;
end;

merci d avance

6 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
28 juil. 2010 à 12:02
Salut,

commence par indenter ton code correctement ... ça te permettra d'y voir plus clair:

[hr]for i :=  0  to  form2.ListBox1.Items.Count - 1 [b]do

begin
  if /bi < liste_image.Count [b]then
  begin
    for /bj : = 0 to image_selectionnee.Count - 1 [b]do
    begin
      if /bliste_image[i] = image_selectionnee[j] [b]then
      begin
        if /bform2.ListBox1.MultiSelect [b]then
          /bform2.ListBox1.Selected[i] := true
        [b]else
        begin
          /bform2.ListBox1.ItemIndex := i;
          break;
        end;
      end;
    end;
  end;
end;
[hr]

quoi qu'il arrive "MultiSelect" où pas la boucle était interrompue par le "Break"


[hr]@+Cirec
[hr]
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
28 juil. 2010 à 12:07
ps: on pouvait aussi éclaircir le code

celui-ci devrait faire la même chose:
[hr]for i :=  0  to  form2.ListBox1.Items.Count - 1 [b]do

  if /bi < liste_image.Count [b]then
    for /bj : = 0 to image_selectionnee.Count - 1 [b]do
      if /bliste_image[i] = image_selectionnee[j] [b]then
        if /bform2.ListBox1.MultiSelect [b]then
          /bform2.ListBox1.Selected[i] := true
        [b]else
        begin
          /bform2.ListBox1.ItemIndex := i;
          break;
        end;
[hr]


[hr]@+Cirec
[hr]
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
28 juil. 2010 à 13:19
et meme
for i := 0 to Min(liste_image.Count, form2.ListBox1.Items.Count) - 1 do 
  for j := 0 to image_selectionnee.Count - 1 do 
    if liste_image[i] = image_selectionnee[j] then 
      if form2.ListBox1.MultiSelect then 
        form2.ListBox1.Selected[i] := true 
      else 
      begin 
        form2.ListBox1.ItemIndex := i; 
        break; 
      end; 

Attention, tu ne remet pas le selected a false, ce qui pourrait etre fait par :

for i := 0 to Min(liste_image.Count, form2.ListBox1.Items.Count) - 1 do 
  for j := 0 to image_selectionnee.Count - 1 do 
    if form2.ListBox1.MultiSelect then      
        form2.ListBox1.Selected[i] := (liste_image[i] = image_selectionnee[j])
    else if liste_image[i] = image_selectionnee[j] then
    begin 
      form2.ListBox1.ItemIndex := i; 
      break; 
    end; 
0
juliens81 Messages postés 26 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 6 juin 2012
28 juil. 2010 à 14:23
Bonjour

merci de votre interet.
pour ce qui est de l indentation je suis desole elle n est pas passer au copier/coller et je n y avais pas prete attention.

pour ce qui est de mes begin .. end a tout va je prefere comme ca (meme si je sais qu ils sont inutiles la plupart du temps ils me rassurent)

par contre je ne sais toujours pas pourquoi quand je passe mon selected a vrai, rien n est selectionne dans ma liste (j ai verifier en debug et je passe bien par la ligne)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
28 juil. 2010 à 14:50
bien vu Guillemouze

si déjà tu vas jusque là il serait peut être mieux de récupérer le résultat de la fonction Min dans une variable ce qui évitera un appel à chaque itération

var
  Nbr: Integer;

Nbr := Min(liste_image.Count, form2.ListBox1.Items.Count) - 1;

pour la mise à False des sélections précédentes il y a :
ListBox1.ClearSelection;


Sinon j'ai testé chez moi, vite fait, et les sélections s'affichent très bien !!

as tu testé un des codes modifié ?


[hr]@+Cirec
[hr]
0
juliens81 Messages postés 26 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 6 juin 2012
28 juil. 2010 à 14:55
Rebonjour,

j avais juste place mon code au mauvais endroit
j effacais completement mon listbox avant de le reremplir et j avais mis juste avant cette etape

merci a tous pour vos reponses
0
Rejoignez-nous