写了一个函数判断子窗口是否已经打开
bool OpenForm(TFrom *WFrom)
{
int i;
bool FromExist;
if(WForm==NULL) return false;
FormExist=false;
for(i=0;i <Screen->FormCount;i++)
{
if(Screen->Forms[i]->ClassType()==WForm->ClassType)
{
FormExist=true;
break;
}
}
if(FormExist==false) return FormExist;
if(WForm->WindowState==wsMinimized)
ShowWindow(WForm->Handle,SW_SHOWNORMAL);
else
ShowWindow(WForm->Handle,SW_SHOWNA);
if(!WForm->Visible) WForm->Visble=true;
WForm->BringToFront();
WForm->SetFocus();
return true;
}

下面是函数的调用
if(OpenForm(Form2)==false)
{
From2=new TForm2(this);
Form2->Parent=this->Parent;
Form2->Show();
}
运行编译通过,在链接的时候就出错显示
[ILINK32 Error]Error:Umresolved external 'TForm1::OpenFrom(Froms::TForm*)'referenced from D:\DEBUG\UNIT1.OBJ
单独运行函数不会出错,一调用函数就出错。

删除了,还是出错

原因是你的函数声明时,把OpenForm作为了Form的成员函数

C/C++ code
class TForm1:public TForm { private: //user declared __published public: bool OpenForm(TFrom *WFrom) ; }

而你在写OpenForm的实现函数时,却又没有写上TForm1这个类域的名字,它只看到了声明,当然连接不到你的实现体的代码!

所以把

C/C++ code
bool OpenForm(TFrom *WFrom) { int i; bool FromExist; if(WForm==NULL) return false; FormExist=false; for(i=0;i <Screen->FormCount;i++) { if(Screen->Forms[i]->ClassType()==WForm->ClassType) { FormExist=true; break; } } if(FormExist==false) return FormExist; if(WForm->WindowState==wsMinimized) ShowWindow(WForm->Handle,SW_SHOWNORMAL); else ShowWindow(WForm->Handle,SW_SHOWNA); if(!WForm->Visible) WForm->Visble=true; WForm->BringToFront(); WForm->SetFocus(); return true; }

改成

C/C++ code
bool TForm1::OpenForm(TFrom *WFrom) { int i; bool FromExist; if(WForm==NULL) return false; FormExist=false; for(i=0;i <Screen->FormCount;i++) { if(Screen->Forms[i]->ClassType()==WForm->ClassType) { FormExist=true; break; } } if(FormExist==false) return FormExist; if(WForm->WindowState==wsMinimized) ShowWindow(WForm->Handle,SW_SHOWNORMAL); else ShowWindow(WForm->Handle,SW_SHOWNA); if(!WForm->Visible) WForm->Visble=true; WForm->BringToFront(); WForm->SetFocus(); return true; }

太谢谢你了,真是高手,一眼就看出了问题