全局常量数组
const
  M0:array[0..8] of integer=(8,5,4,3,5,2,3,9);
  M1:array[0..6] of integer=(0,7,3,9,0,5);
  M2:array[0..12] of integer=(5,3,6,3,6,3,7,4,2,4,7,4);
上面数组建好后,我想在过程里跟据条件选择其中一个数组使用。
procedure TForm2.LoadLevel(e:Integer);
var MyArray  //问题在这里,这个数组怎么定义下面才可以正确赋值?
begin
 if e=0 then MyArray:=M0;
 if e=1 then MyArray:=M1;
 if e=2 then MyArray:=M2;
 //这里开始使用MyArray数组了,就像直接使用M0,M1,M2数组一样。
end;现在的问题是如何定义这个MyArray数组变量,才能让下面跟据条件正常赋值?

解决方案 »

  1.   

    if e=0 then 
    begin
      SefLength(MyArray,Length(M0);
      再用move或者其他方法把M0的内容放到MyArray中
    end;
      

  2.   

    老大,虽然我用Delphi开发过很多东西了(因为有其它编程基础),但DELPHI的底子太差,很多基础的东西都不是很了解。能不能给我全部代码,就是说如果定义这个MyArray变量。
    你说的:再用move或者其他方法把M0的内容放到MyArray中,我跟本就无从下手啊。
      

  3.   

    一:按照bdmh的办法,使用动态数组。
    二:把你的数组常量作为参数传递到LoadLevel里面,然后使用low和high遍历数组元素。
      

  4.   

    我现在用了楼上说的,好像可以,但有个问题啊。
    好像数据转移不完整,我的数值元素有几百个,但MOVE过去的只有几十个,不知道为什么。
    我认真查看了MOVE后的数组元素,认真比对原来的发现有的转移了十多个,有的二十多的,有的三十多个(主楼发贴中我是只举个例子,所以元素长度很小,实际中我的一般都要二三百个数组元素),没有规律,后面的不知道为什么不转了,全是 0 。  if e=0 then
        begin
          SetLength(MyArray,Length(M0));
          Move(M0[0],MyArray[0],Length(M0));
        end;
      

  5.   

    唉,声明,我不是 IT 人员const
      M0:array[0..7] of integer=(8,5,4,3,5,2,3,9);
      M1:array[0..5] of integer=(0,7,3,9,0,5);
      M2:array[0..11] of integer=(5,3,6,3,6,3,7,4,2,4,7,4);
    var
      MyArray: array of Integer;
      i: Integer;
    begin
      if 0 = 0 then
      begin
      SetLength(MyArray,Length(M0));
      CopyMemory(MyArray,@M0,Length(M0));
       for I := Low(MyArray) to High(MyArray) do
         Memo1.Lines.Add(IntToStr(M0[i]))
      end;
    end;
      

  6.   

    回楼上,可能是我的DELPHI2009有问题了。
      if e=0 then
        begin
          SetLength(MyArray,Length(M0));
          //Move(M0[0],MyArray[0],Length(M0));
          CopyMemory(MyArray,@M0,Length(M0));
        end;
    结果一样,还是只能移动前几十数组元素,认真检测后发现MOVE函数里与Length(M0)有很大关系,只要len值设置为实际数组长度的四倍多就可以显示完整了,不知道为什么于是我改为  if e=0 then
        begin
          SetLength(MyArray,Length(M0));
          Move(M0[0],MyArray[0],Length(M0)*4+1);
        end;长度乘4加1,可以显示完整了,不知道为什么。非常郁闷中。。一天后结贴,大家讨论下为什么,遇鬼了。