Консультация № 109342
14.11.2007, 09:27
0.00 руб.
0 2 2
Здравствуйте, мне тут надо программу написать, чтобы при нажатии на кнопку добавить выделенные элементы списка listbox1 перемещались в listbox2, я нашел код этот в интернете (в приложении).
Еще надо чтобы при нажатии на кнопку отменить все элементы из Listbox2, корорые были перемещены из listbox1, переместились обратно в Listbox1.
Как это сделать не знаю, подскажите пожалуйста.

Приложение:
for i := 0 to ListBox1.Items.Count-1 doif ListBox1.Selected[i] thenListBox2.Items.Add(ListBox1.Items[i])

Обсуждение

Неизвестный
14.11.2007, 12:24
общий
это ответ
Здравствуйте, Исаак Моисеевич!
В вашем случае, насколько я понял, нужно запоминать какие именно строки перемещались в последнюю очередь... На сколько я понял, других требований нет, поэтому предлагаю следующий простой способ, разместить на форме еще один ListBox, тогда код добавления будет следующий:

ListBox3.Items.Clear;
for i := 0 to ListBox1.Items.Count-1 do
if ListBox1.Selected[i] then
begin
ListBox2.Items.Add(ListBox1.Items[i])
ListBox3.Items.Add(ListBox1.Items[i])
end;
-----------------------
Перемещение обратно будет следующим
for i := 0 to ListBox3.Items.Count-1 do
begin
ListBox1.Items.Add(ListBox3.Items[i])
ListBox2.Items.Delete(ListBox1.Items.IndexOf(ListBox3.Items[i]));
end;

Ну и для красоты не забываем ставить ListBox3.Visible := False
Неизвестный
14.11.2007, 12:28
общий
это ответ
Здравствуйте, Исаак Моисеевич!
Как я понял вы уже сумели скопировать данные из одного ListBox в другой, а загвостка осталась с отменой, я предлагаю вам
1. Добавить 2 глобальные переменные 1ая будет запоминать сколько изначально было элементов в ListBox2 вторая следить за тем чтобы это количество не менялось
При нажатии на кнопку Добавить добавьте вот эти строчки
push и count2 глобальные переменные push : boolean; count: integer;

if push = false then
begin
count2 := ListBox2.Count;
push := true;
end;

а событие для кнопки отмена лежит в приложении

вот вроде и всё

Приложение:
varj : integer;begin if (ListBox2.Count = count2) or (count2 = 0) then showmessage(‘Изменений небыло‘) else begin J := ListBox2.Count; while j >= count2 do begin listBox2.Items.Delete(j); j := j-1; end; end;end;
Форма ответа