你的VForm是TForm类型,上面应该没有控件,你应该用放了控件的窗体如TVForm。

解决方案 »

  1.   

    procedure AutoSave(vForm:TForm;DType:char);
    var i,Len:integer;
        rForm: Tform;    
    begin
      rForm := TForm.Create(Self);
      rFrom := vForm;  
      for i:=0 to rForm.ComponentCount - 1 do
        begin
          ....
        end;
      

  2.   

    C_Sharp(www.borlan.net) ,我也知道,就是不知怎样写,就是怎样传TVForm,我这个过程是在一个公共的单元文件里写的。
    Snakeguo(枫) 你这样只会得到一个刚初始化完的窗体
      

  3.   

    我是想取得窗体上所有控件的值,但一到for i:=0 to vForm.ComponentCount - 1 do 这里就出错了,说存取地址出错
      

  4.   

    老兄这个问题太简单了,本来是不用上CSDN的。
    eg:function MyFunc(MyForm : TForm) : boolean;
    begin
     if MyForm.EditName.text = '我的天' then
        MyForm.EditName.text := '你的天' ;
    end;
    没有别的。
    但是不知道我的意思是不是你的意思。
      

  5.   

    songlichao() 好像你的和我写的差不多,但我做到这里就出错了
    for i:=0 to vForm.ComponentCount - 1 do 
    就是访问不到这个窗体,还怎么取这些控件呢
      

  6.   

    呵在调用这个FORM的控件时,
    你的FORM已经CREATE了吗?
      

  7.   

    出现这种问题的原因是内存被裁减了,解决的方法:
    有若干种办法可以解决,第一,你在已知窗体类类型的时候可以用强制转换或as操作转换成你需要的窗体类型即可操作,第二、万全的方法是你将窗体的类型传入,即传入一个窗体类的引用,注意这是类的类型的引用,不是实例的引用,要声明为:TFormClass类型,或者传入类的类型的字符串,然后用FindClass来获得,但必须在initialization中RegistrClass;
      

  8.   

    可能是你调用出错
    procedure TForm1.SomeThing;
    begin
      AutoSave(Self, 'A');
      //不是AutoSave(Form1, 'A');
    end;procedure AutoSave(vForm:TForm;DType:char);
    var 
      i, Len: integer;    
    begin  
      if Assigned(vForm) then //看是否实例化了
      begin
        for i:=0 to vForm.ComponentCount - 1 do
          begin
            ....
          end;
      end;
    end;
      

  9.   

    多谢copy_paste(木石三) ,成功了,原来是这样,但为什么要传self过去而传form1过去不行呢?self不就是form1吗?
      

  10.   

    不好意思,没注意你提前的贴。
    Self, Sender, Parent以前有很多贴子讨论,但是这些答案大家说的都比较模糊,我也说不太清,而你所说的Self不就是Form1,在很多情况是,前提是在Application.CreateForm(TForm1, Form1)创建了Form1的实例,也就是说Form1是给赋值了的,而你可能Form1不是主窗体,它是后面才用到,并没有Form1 := TForm1.Create(..),或Application.CreateForm(..)之类的,也就是说var Form1: TForm1;它只是起一个定义对象变量作用,而不是创建赋值作用,虽然它是一个单元的全局变量,所以一般情况你要注意使用一个全局变量时是否Create, Destroy,在程序中尽量用Self,而不要用已经定义的变量Form1/form2之类的。
      还有注意:当Free一个对象时,最好再nil一下,不然Assigned(Object)仍然会返回为真,虽然它已经被Free;
      Object.Free;
      Object := nil;