我在一个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
为何?如何
在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
为何?如何
你已经关闭了窗体?我想,既然是全局变量就不必临时建立,在建立窗体时建立,用时只需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);
我在一个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
为何?如何
在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实在没办法理解..后来基于以上的试验,转了个大弯把需求解决了..
调试的时候发现 TImage有数据,但是BC就是报错,说是NULL。
后来在form2里声明,再new,
结果form2里可以使用,form1又说是NULL。
======================
那是当然了,new出来的TImage都不是同一个TImage
再有你如果用动态new方法 TForm1 *f1 = new TForm1(this);
应该用f1->ListBox1->....而不是Form1->ListBox1->...