procedure TForm1.FormCreate(Sender: TObject);
begin
  FileList:=TStringList.create; //生成全局实例 FileList
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    FileList.Free;             //释放列表
end;procedure TForm1.Action1Execute(Sender: TObject);   //打开添加文件
var
  i:integer;
begin
  if self.OpenDialog1.execute then
  FileList.add(Self.OpenDialog1.FileName);
end;//然后我另外有个列表skn,保存皮肤文件用的procedure TForm1.BitBtn7Click(Sender: TObject);  //更换皮肤动作
var
   skn:TStringList;
   sr:TSearchrec;
   tmp:string;
   i:=integer;
begin
  skn:=TStringList.Create;
  skn.Clear;
  if FindFirst('*.skn',FaAnyFile,sr)=0 then            //查找目录下面的皮肤文件,
  begin
  tmp:=ExtractFileExt(sr.Name);
  if Tmp='.skn' then skn.Add(sr.Name);        //添加皮肤文件名到skn序列中
  end;
  while FindNext(sr)=0 do
  begin
  tmp:=ExtractFileExt(sr.Name);
  if Tmp='.skn' then skn.Add(sr.Name);
  end;
  FindClose(sr);
  randomize();
  i:=RanDom(skn.count-1);   //产生一个随机的皮肤索引号
  if FileExists(skn[i]) then  self.SkinData1.LoadFromFile(skn[j1]);  //装载皮肤
  skn.Free;
end;   问题说明:不先使用添加文件动作procedure TForm1.Action1Execute(Sender: TObject); 
更换皮肤正常,如果使用按钮先运行Action1那么
  skn.count总是等于0,好像不能读取皮肤文件到序列,
  i的直会在-1000000  和 +100000的很大一个范围内变化,对应不了皮肤文件的索引了,
虽然if FileExists(skn[i]) then  self.SkinData1.LoadFromFile(skn[j1]);  语句多余,但是不判断就会装入出错;加入这个语句,先运行打开文件以后就不能更换皮肤了,还会提示内存冲突;
   我声明skn为全局对象一样出错,百思不得其解啊,希望大家指教
  请问大家,是不是同时使用2个字符串列表会出错呢?