E2031 Cannot cast from 'TComponent *' to 'TColumn *'

robin_wan 2008-10-28 04:09:08
void __fastcall TfrmMain::btnClick(TObject *Sender)
{
TComponent *frmComponent;
TIniFile *ini;
ini = new TIniFile( "abc.ini" );
try
{
for(int i=0 ;i<ComponentCount;i++) //遍历Form组件
{
frmComponent=Components[i];
if (frmComponent->ClassNameIs("TColumn") )
{
dynamic_cast<TColumn *>(frmComponent)->Title->Caption=
ini->ReadString(pFrom->Name,frmComponent->Name
+".Title.Caption",dynamic_cast<TColumn *>(frmComponent)->Title->Caption);
}
}
}
__finally
{
delete ini;
}
类型转换出错,请问如何处理???
[C++ Error] utLanguage.cpp(149): E2031 Cannot cast from 'TComponent *' to 'TColumn *'

...全文
95 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sczyq 2008-10-29
  • 打赏
  • 举报
回复
是一个语言转换文件吧,我就是这样做的!

if (Control->ClassNameIs("TDBGrid"))
// func params: (TControl *Control, TIniFile *IniFile, AnsiString ASection)

{
TDBGrid *DBGrid= (TDBGrid *)Control;
TColumn *Column;
AnsiString ColumnFieldName;
for (int i=0; i<DBGrid->Columns->Count; i++)
{
Column = DBGrid->Columns->Items[i];
ColumnFieldName = Column->FieldName;
if (ColumnFieldName.Length())
Column->Title->Caption = IniFile->ReadString(ASection,
DBGrid->Name + "." + ColumnFieldName,
Column->Title->Caption);
}
}

jxw1987628 2008-10-28
  • 打赏
  • 举报
回复
不是所有的组件都包含像TColumn这样的对象,

有的控件才有,如TListView 应该有TCollection

TDBGrid应该有TColumn。。
robin_wan 2008-10-28
  • 打赏
  • 举报
回复
查看了一下帮助,遍歷Form的組建是抓不到Colum的。
哪么我要能够遍历Form上的组件要怎样做呢?
yuanreid 2008-10-28
  • 打赏
  • 举报
回复
TColumn类并非继承自TCompoent,因此通过ComponentCount无法遍历
Jim@luckeeinc.com 2008-10-28
  • 打赏
  • 举报
回复
TObject->TPersistent->TCollectionItem->TColumn
你遍歷Form的組建是抓不到Colum的

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧