Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Список списков


Автор: Aehn 10.9.2008, 16:05
Конструируется список, в который я пытаюсь поместить другой список - список строк:
Код

ListBox1.Items.Objects[index]):=TStringList.Create;
TStringList(ListBox1.Items.Objects[index]).Add(nameA)


При нажатии на другую кнопку я пытюсь вывысти от определенного элемента созданного списка его список строк в другоц ListBox2:
Код

        for i:=0 to {TBt.aliases.Count-1}K do begin
        s:=TStringList(ListBox1.Items.Objects[index]).Names[i];
        ListBox2.AddItem(s,nil);

Но не получается, потому что переменная s содержит N количество пустых строк. Причем N равно количеству созданных строк в первой процедуре

Автор: pseud 10.9.2008, 18:10
а так?
Код

s := TStringList(ListBox1.Items.Objects[index]).Strings[i];


Добавлено через 4 минуты и 27 секунд
не забывай убирать мусор!
вот пример:
  на форме:
  - 2 кнопки;
  - ListBox с 3 строками "1", "2", "3"
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  j: Integer;
begin
  for i := 0 to ListBox1.Count - 1 do
  begin
    ListBox1.Items.Objects[i] := TStringList.Create;
    for j := 1 to 3 do
      TStringList(ListBox1.Items.Objects[i]).Add(ListBox1.Items[i] + IntToStr(j));
  end;
  Button1.Enabled := False;
  Button2.Enabled := True;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
  j: Integer;
  sList: TStringList;
  s: string;
begin
  s := '';
  for i := 0 to ListBox1.Count - 1 do
  begin
    sList := TStringList(ListBox1.Items.Objects[i]);
    if sList <> nil then
    begin
      s := s + 'строка ' + IntToStr(i + 1) + ' = ';
      for j := 0 to sList.Count - 1 do
        s := s + sList.Strings[j] + ' ';
      s := s + #13#10;
    end;
  end;
  ShowMessage(s);
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  i: Integer;
  obj: TObject;
begin
  // не забываем убрать мусор
  try
    for i := 0 to ListBox1.Count - 1 do
    begin
      obj := ListBox1.Items.Objects[i];
      if obj <> nil then
      begin
        obj.Free;
        ListBox1.Items.Objects[i] := nil;
      end;
    end;
  except
  end;
end;


Автор: Aehn 11.9.2008, 08:33
Этого даже достаточно!
Код

s := TStringList(ListBox1.Items.Objects[index]).Strings[i];

И чего меня толкнуло использовать name вместо string?
Это же очевидно!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)