Comment synchroniser deux listbox ? [Résolu]

Messages postés
24
Date d'inscription
jeudi 6 janvier 2011
Dernière intervention
24 juin 2017
- - Dernière réponse : dino34
Messages postés
24
Date d'inscription
jeudi 6 janvier 2011
Dernière intervention
24 juin 2017
- 26 févr. 2015 à 12:08
Bonjour,

j'ai un listbox1 qui contient des nombres de 1 à 100.

je cherche à faire une division par 21 chaque 21 lignes et transférer le résultat

vers listbox2.


par exemple:

du 1 au 20 (listbox1) j'aurai 0 dans (listbox2)
du 21 au 41 (listbox1) j'aurai 1 dans (listbox2)
du 42 au 63 (listbox1) j'aurai 2 dans (listbox2)
du 64 au 83 (listbox1) j'aurai 3 dans (listbox2)
du 84 au 100 (listbox1) j'aurai 4 dans (listbox2)

je cherche quand je clic sur button1 :

il m'affiche dans listbox2 le tout à la fois :
0
1
2
3
4

procedure TForm1.Button1Click(Sender: TObject);               

var

i,Nr: integer;

begin

ListBox2.Clear;

Nr:=0;
for i := ListBox1.Items.Count-1 downto 0 do
Nr := StrToIntDef(ListBox1.Items[ListBox1.ItemIndex], 0);
Nr := Trunc(Nr/22);
ListBox2.Items.Add(IntToStr(Nr));
end;
end.




NB: le code que j'ai transfert un seul items cité en haut 0 ou 1 ou 2 etc.



merci pour votre aide et support .




--
Afficher la suite 

Votre réponse

6 réponses

Messages postés
692
Date d'inscription
jeudi 17 avril 2008
Dernière intervention
14 septembre 2018
0
Merci
Salut
Ce n'est pas très clair !
voici déjà quelques commentaires sur ton code publié en attendant plus de précisions :

"for i := ListBox1.Items.Count-1 downto 0 do"
=> il manque "begin",
=> "dowto" donc on commence par la fin ? ce qui ne correspond pas à l'exemple qui commence par la ligne 1 (en fait c'est "ligne 0" comme dans tout les listbox

"Nr := StrToIntDef(ListBox1.Items[ListBox1.ItemIndex], 0);"
=> "ListBox1.ItemIndex" n'a rien à voir avec le calcul car il ne bouge pas car il correspond à la ligne précédemment cliquée sur le listbox
=> "Nr := StrTo ..." => en fait il faut mettre "Nr := Nr + StrTo ..." sinon en final tu n'auras le résultat que de la dernière ligne et de plus divisée par par la ligne code qui suit !

"Nr := Trunc(Nr/22);"

Dans ton exemple le nombre de ligne traitée est différent à chaque fois. Est volontaire ?
du 1 au 20 (listbox1) j'aurai 0 dans (listbox2) ==> 20 lignes
du 21 au 41 (listbox1) j'aurai 1 dans (listbox2) ==> 21 lignes
du 42 au 63 (listbox1) j'aurai 2 dans (listbox2) ==> 22 lignes
du 64 au 83 (listbox1) j'aurai 3 dans (listbox2) == 20 lignes
du 84 au 100 (listbox1) j'aurai 4 dans (listbox2) ==> 17 lignes
Commenter la réponse de dubois77
Messages postés
24
Date d'inscription
jeudi 6 janvier 2011
Dernière intervention
24 juin 2017
0
Merci
salut dubois77:

c'est copié collé qui a fait le problème ,la division est par 22 .

j'ai essayé d'expliqué une seul chose :

je veux faire la divisons des items qui se trouve dans listbox1 par 22 chaque 22 lignes et mettre le résultat dans listbox2.


merci




--
Commenter la réponse de dino34
Messages postés
24
Date d'inscription
jeudi 6 janvier 2011
Dernière intervention
24 juin 2017
0
Merci
salut dubois77

je cherche à envoyer le projet .exe mais j'arrive pas à le faire

est ce qu'il y a un autre moyen à le faire

merci .

--
Commenter la réponse de dino34
Messages postés
692
Date d'inscription
jeudi 17 avril 2008
Dernière intervention
14 septembre 2018
0
Merci
Essaye celà :


NR := 0;
IX := 0;
for i:=0 to ListBox1.Items.Count-1 to 0 do
begin
Nr := Nr + StrToIntDef(ListBox1.Items[ListBox1.ItemIndex], 0);
inc(IX);
if IX=22 then
begin
Nr := Trunc(Nr/22);
ListBox2.Items.Add(IntToStr(Nr));
Nr := 0;
IX := 0;
end;
end;
Commenter la réponse de dubois77
Messages postés
260
Date d'inscription
lundi 27 octobre 2003
Dernière intervention
4 mars 2016
0
Merci
Salut,
var
EndVal, I : Integer;
...
begin
EndVal := StrToIntDef(ListBox1.Items[ListBox1.Items.Count-1],0)div 22;
for I := 0 to EndVal do
ListBox2.Items.Add(Format('%d',[I]));
end;
//ou plus simple
begin
EndVal := ListBox1.GetCount div 22;
//ou => EndVal := ListBox1.Items.Count div 22;
for I := 0 to EndVal do
ListBox2.Items.Add(Format('%d',[I]));
end;
@+

@dubois77, Salut, je crois que
for i:=0 to ListBox1.Items.Count-1 to 0 do
va y avoir un ti problème LOL @+
dubois77
Messages postés
692
Date d'inscription
jeudi 17 avril 2008
Dernière intervention
14 septembre 2018
-
Oui yanb, il y a un petit to 0 qui est resté suite au copier de ligne originale
mais dino34 ne c'est sans doute pas laissé prendre

Par contre je ne crois pas qu'avec ta méthode le résultat soit conforme à la demande de dino34 :
à priori si j'ai bien compris il fait la somme de chaque paquet de 22 lignes et affiche le résultat dans listbox2
Seul dino34 peut dire si je pense bien !!
Cordialement
Commenter la réponse de cs_yanb
Messages postés
24
Date d'inscription
jeudi 6 janvier 2011
Dernière intervention
24 juin 2017
0
Merci
Salut et désoler pour le retard :


Le code que j'ai utilisé pour régler le problème est listé ci-dessous:

var
r:temp,IX : integer;

begin
temp :=0;
IX :=0;
for r:=0 to ListBox1.Items.Count-1 do
begin
temp:= StrToIntDef(ListBox1.Items.Strings [r],0);
inc(IX);
if IX=22 then
begin
temp:=trunc(temp/22) ;
ListBox2.Items.Add (IntToStr (temp));
temp := 0;
IX :=0;
end;
end;
end;

Whismeril
Messages postés
12415
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 décembre 2018
-
Bonjour, si la question est résolue, merci de cliquer sur le lien "Marquer comme résolu" juste sous le titre de la discussion
dino34
Messages postés
24
Date d'inscription
jeudi 6 janvier 2011
Dernière intervention
24 juin 2017
-
Bonjour:

le nécessaire a été fait .

merci
Commenter la réponse de dino34

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.