Il y a pourtant une FAQ
Synchroniser deux ListBox
Cette exemple montre comment synchroniser l'affichage du 1er Element, en ajoutant ItemIndex, on synchronise le Focus, et la modification de la propriété Selected est effectivement la cerise sur le gateau !
Marley_T, pense à la touche
F1 = Aide de Delphi, prend le temps de lire la documentation de la TListBox !
Et fais
l'effort comprendre le code, il n'est pas suffisant de copier-coller sans aucune réflexion ! c'est fort dommage !
Pour éviter les Problèmes d'index, une petite modification du code de nuxtay
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| procedure SynchroListBox(ASrc, ADest1, ADest2: TListBox);
var
I: Integer;
begin
if ASrc.MultiSelect and ADest1.MultiSelect and ADest2.MultiSelect then
begin
for I := 0 to ASrc.Items.Count - 1 do
begin
if I < ADest1.Items.Count then
ADest1.Selected[I] := ASrc.Selected[I];
if I < ADest2.Items.Count then
ADest2.Selected[I] := ASrc.Selected[I];
end;
end;
ADest1.TopIndex := Min(ASrc.TopIndex, ADest1.Items.Count - 1);
ADest1.ItemIndex := IfThen(ASrc.ItemIndex < ADest1.Items.Count , ASrc.ItemIndex, -1); // Si Hors limite pas de sélection
ADest2.TopIndex := Min(ASrc.TopIndex, ADest2.Items.Count - 1);
ADest2.ItemIndex := IfThen(ASrc.ItemIndex < ADest2.Items.Count , ASrc.ItemIndex, -1); // Si Hors limite pas de sélection
end; |
Math a inclure dans les uses;
Tu n'as vais que oublié begin end, tu as inversé Source Multiple et Destination Unique alors que c'est évidemment Source Unique vers Destination Multuple, tu as fait un double affectation de la Destination, d'où mes remarques de se poser et de réflechir ...
Partager