我写了一个函数:
function  Tzyh_class.get_dept_name_Tstringlist(sender : TObject) : Tstrings ;
var
  deptname : Tstrings;
begin
  deptname := TStringlist.Create;
  deptname.Add('123');
  deptname.Add('456');
  deptname.Add('789');
  deptname.Add('876');
  result := deptname;
  ShowMessage(result.Text);  (在这个地方能够正常显示)
  deptname.Free;  
end;
然后在另外的unit 中调用这个函数;ShowMessage(zyh_class.get_dept_name_Tstringlist(sender).Text);
在这里显示时出错,系统提示访问冲突,然后我无论使用全局变量还是局部变量进行传递数据,都无法解决问题。请问如何在不同的unit之间传递Tstrings型数据。

解决方案 »

  1.   

    use 相应的unit不就行了??
      

  2.   

    在需要用这个unit下tstring的unit1中的uses中加上unit就可以了!
      

  3.   

    该加的我都已经加上了,连Tstrings型数据所在的unit  'Classes' 都加进去了。就是Tstrings型的数据不行,其他的如string型都可以的。
      

  4.   

    我试了可以
    type
      TForm2 = class(TForm)
      private
        { Private declarations }
      public
        { Public declarations }
         function  get_dept_name_Tstringlist(sender : TObject) : Tstrings ;
      end;var
      Form2: TForm2;implementationfunction  TForm2.get_dept_name_Tstringlist(sender : TObject) : Tstrings ;
    var
      deptname : Tstrings;
    begin
      deptname := TStringlist.Create;
      deptname.Add('123');
      deptname.Add('456');
      deptname.Add('789');
      deptname.Add('876');
      result := deptname;
      ShowMessage(result.Text);
      deptname.Free;
    end;{$R *.dfm}end.procedure TForm1.FormCreate(Sender: TObject);
    begin
      ShowMessage(Form2.get_dept_name_Tstringlist(sender).Text);end;
    Form1是主窗体, 包含Form2, 
    注意函数是在Public内声明, 
      

  5.   

    to 吃好喝好:
    是吗?可是我根据你的程序进行运行的时候,在form1中是有显示,但是没有任何字符串,而且将Form2.get_dept_name_Tstringlist(sender)赋值给一个ComboBox1.Items时,调试出错,访问冲突。
    form1中加入的代码如下:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ShowMessage(Form2.get_dept_name_Tstringlist(sender).Text);
      ComboBox1.Items := Form2.get_dept_name_Tstringlist(sender);
    end;
      

  6.   

    我找到答案了:
    只要将form1中的 deptname.Free; 注释掉就可以了。
      

  7.   

    result := deptname; 应该是地址传递,
    用assign深复制吧!!!!