function DecodeStrToStrLst(SourceStr: string): TStringList;
var
  StrLst: TStringList;
  TmpStr: string;
begin
  StrLst := TStringList.Create;
  while AnsiStrScan(PChar(SourceStr), ',') <> nil do
  begin
    TmpStr := LeftBStr(SourceStr, POS(',', SourceStr) - 1);
    StrLst.Add(TmpStr);
    SourceStr := RightBStr(SourceStr, Length(SourceStr) - POS(',', SourceStr));
  end;
  StrLst.Add(SourceStr);
  Result := StrLst;
end;procedure TForm1.Button1Click(Sender: TObject);
var
  Actors: TStringList;
  i:integer;
begin
  Actors := TStringList.Create;
  try
    lbActor.Clear;
    if edit1.Text <> '' then
    begin
      Actors := DecodeStrToStrLst(edit1.Text);
      for i := 0 to Actors.Count - 1 do
        lbActor.AddItem(Actors.Strings[i], nil);
    end;
  finally
    Actors.Free;
  end;
end;

解决方案 »

  1.   

      Actors := TStringList.Create; 
      try 
        lbActor.Clear; 
        if edit1.Text <> '' then 
        begin 
          Actors := DecodeStrToStrLst(edit1.Text); 
          for i := 0 to Actors.Count - 1 do 
            lbActor.AddItem(Actors.Strings[i], nil); 
        end; 
      finally 
        Actors.Free; 
      end; 就这点代码就有问题,Actors已经创建了,DecodeStrToStrLst里又创建一个,很奇怪
      

  2.   


    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      Actors: TStringList; 
      i:integer; 
    begin 
      //Actors := TStringList.Create; 该句有问题,有内存泄漏
      try 
        lbActor.Clear; 
        if edit1.Text <> '' then 
        begin 
          Actors := DecodeStrToStrLst(edit1.Text); 
          for i := 0 to Actors.Count - 1 do 
            lbActor.AddItem(Actors.Strings[i], nil); 
        end; 
      finally 
        Actors.Free; 
      end; 
    end;
      

  3.   

    Actors已经创建了,DecodeStrToStrLst里又创建一个也就是说函数里面可以直接用前面这个Actors?请给出修改建议,非常感谢。
      

  4.   

    2楼不是给你写好了吗要么你在外边创建,该一下方法function DecodeStrToStrLst(SourceStr: string;list:TStringlist): boolean; 调用
          if not DecodeStrToStrLst(edit1.Text,lbActor) then exit;