我在一个unit1单元中声明一全局变量NameList,
在form1中对其进行赋值
 if(NameList!=NULL) delete NameList;
 NameList=new TStringList();
for(int i=0;i<ListBox2->Count;i++)
NameList->Add(ListBox2->Items->Strings[i]);
ListBox1->Items=NameList;
this->close();但是在form2中用
 ADOQuery1->FieldByName("teacher")->Value=NameList->Strings[m]);
 出错,调试到这里却发现NameList为NULL  
为何?如何        

解决方案 »

  1.   

    this->close(); ??
    你已经关闭了窗体?我想,既然是全局变量就不必临时建立,在建立窗体时建立,用时只需Clear就行了NameList->Clear();
    for(int i=0;i<ListBox2->Count;i++)
      NameList->Add(ListBox2->Items->Strings[i]);
    ListBox1->Items=NameList;
    this->close(); //关闭就没了,这是VCL的销毁机制,如果想关闭后让其他窗体使用NameList应该放在其他窗体.当然还可以更简单,不需要NameList这个全局变量
    ListBox1->Items->Assign(ListBox2->Items);
      

  2.   


    我在一个unit1单元中声明一全局变量NameList,
    在form1中对其进行赋值
    if(NameList!=NULL) delete NameList;
    NameList=new TStringList();
    for(int i=0;i<ListBox2->Count;i++)
    NameList->Add(ListBox2->Items->Strings[i]);
    ListBox1->Items=NameList; //这句没有用,主要我是想在form1当中取得数据,在form2当中用,所以才用全局变量
    this->close();//这句去掉也是一样结果。说明:form1我是用TForm *f1=new TForm();
                  if(f1->ShowModal) delete f1;但是在form2中用
    ADOQuery1->FieldByName("teacher")->Value=NameList->Strings[m]);
    出错,调试到这里却发现NameList为NULL
    为何?如何
      

  3.   

    NameList->Parent = Form1; 试一下,也许有用
      

  4.   

    哦...不是..我前几天也碰到过这样的情况:
    在form1里 new 的TImage,在form2中没办法使用。
    调试的时候发现 TImage有数据,但是BC就是报错,说是NULL。
    后来在form2里声明,再new,
    结果form2里可以使用,form1又说是NULL。
    超郁闷..没办法。只能把调用代码写在Form1的单元里才可以使用,如:
    Form2->Memo1->lines->add(Image->name);如果在Form2里调用则不可以,如
    #include unti1.h;Memo1->lines->add(Image->name); //报错,Image为NULL,但实际Image = 0x004DXXXX实在没办法理解..后来基于以上的试验,转了个大弯把需求解决了..
      

  5.   

    在form1里 new 的TImage,在form2中没办法使用。
    调试的时候发现 TImage有数据,但是BC就是报错,说是NULL。
    后来在form2里声明,再new,
    结果form2里可以使用,form1又说是NULL。
    ======================
    那是当然了,new出来的TImage都不是同一个TImage
      

  6.   

    ADOQuery1->FieldByName("teacher")->Value=NameList->Strings[m]);你用的是C方式的全局变量,有没有用extern呢,这种方式不是很好,为什么不放在public中?
    再有你如果用动态new方法 TForm1 *f1 = new TForm1(this);
    应该用f1->ListBox1->....而不是Form1->ListBox1->...