作了个小程序,其中需要使用TStrings类作为一个函数的返回值,但本人总是调试不成功,不知是我程序的问题,还是本身这种方法就行不通!!请各位高手帮忙解决一下,先谢过了!源程序如下:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    function ReturnStrings(s: String): TStrings;
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}function TForm1.ReturnStrings(s: String): TStrings;
var
  StringList: TStrings;
begin
  StringList := TStringList.Create;
  try
    StringList.Add('111');
    StringList.Add('s');
  finally
    Result := StringList;
    StringList.Free;
  end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStrings;
  str: String;
begin
  sl := TStringList.Create;
  str := '111';
  try
    sl :=  ReturnStrings(str);
    showmessage(IntToStr(sl.Count));
  finally
    sl.Free;
  end;
end;end.

解决方案 »

  1.   

    你自己写错了
    function TForm1.ReturnStrings(s: String): TStrings;
    var
      StringList: TStrings;
    begin
      StringList := TStringList.Create;
      try
        StringList.Add('111');
        StringList.Add('s');
      finally
        Result := nil;
        StringList.Free;
      end;
      Result := StringList;
      StringList.Free;
    end;
      

  2.   

    更正:
    function TForm1.ReturnStrings(s: String): TStrings;
    var
      StringList: TStrings;
    begin
      StringList := TStringList.Create;
      try
        StringList.Add('111');
        StringList.Add('s');
      finally
        Result := nil;
        StringList.Free;
        Exit;
      end;
      Result := StringList;
      StringList.Free;
    end;
      

  3.   

    这程序怎么了,没有什么问题吧另外你给ReturnStrings传递的那个参数没有用处啊,
    StringList.Add('s');
    这里的引号是不是不需要呢?
      

  4.   

    Result := StringList;
    没有传递过去。
      

  5.   

    我是这样实现的!function TForm1.ReturnStrings(Str: String): TStrins;
    begin
      Result:= TStringList.Create;
      try
        Result.add('111');
        Result.add('s');
      except
        exit;
      end;
    end;然后用你的BUtton事件里的代码就可以出现2的提示框!
      

  6.   

    例:public
        function ss(Sd:TStrings):Tstrings;
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}function TForm1.ss(Sd:TStrings):Tstrings;
    begin
      sd.Add('aa');
      sd.Add('bb');
      Result := sd;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var Sd:TStrings;
    begin
      Sd := TStringList.Create;
      Try
        cb.Items := ss(Sd);
      Except 
        Sd.Free;
      End;
    end;詳見:http://expert.csdn.net/Expert/topic/1568/1568838.xml?temp=9.096926E-02
      

  7.   

    感谢各位!已经成功了!楼上的FrameSniper(★框架狙击手★№2) 说得对,StringList.Add('s');  中的引号的确是多余的,我的本意也是不要引号的,这样ReturnStrings传递的那个参数才能排上用场。我本来的目的也是对传过来的string处理,结果为TStrings类,返回。综合了各位的意见,觉得 JackyChang(摩托骡拉) 的实现方法是最简洁的,基本上采用了他的方法,只不过把's'的引号去掉了。另外,Bes96261(秋水孤鶩) 给出的方法也很好,实现的是另外的用途!