奇怪的TDBLookupComboBox->Text属性

scottlai 2008-06-16 03:13:18
本人正在开发一个数据库相关的程序,用到TDBLookupComboBox。我写了一个通用的检验类用于验证用户输入的信息是否符合规则,这个类用到RTTI的GetStrProp()来读取指定控件的属性值。奇怪的是,在读TDBLookupComboBox的Text属性时,返回的是空值,我再用单步调试时发现在获取PPropInfo的时候就已经返回NULL,也就是PropInfo = GetPropInfo((TTypeInfo *)Control->ClassInfo(), "Text")找不到Text属性。我试着在一个Button里面直接调用ShowMessage(cbWhs->Text)的时候,却又能显示选项值。

请各位帮帮忙解答一下,谢谢。
...全文
158 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
猛禽 2008-06-17
  • 打赏
  • 举报
回复
汗,看了半天VCL源码,结果在帮助中发现Text属性是public的,当然取不到啦。
RTTI只能操作published的属性。
scottlai 2008-06-17
  • 打赏
  • 举报
回复
快沉了,上来顶一下,希望有专家能帮帮忙(ccrun,猛禽等等~)。
scottlai 2008-06-17
  • 打赏
  • 举报
回复
那个问题是解决不了的,结帖~!
scottlai 2008-06-17
  • 打赏
  • 举报
回复
呵呵,自己发现了问题所在:
typedef AnsiString (__closure *RegFunc)();
应该要写成:
typedef AnsiString __fastcall (__closure *RegFunc)();

天呀,就一个__fastcall关键字就会引起错误,看来不能忽视小处。

虽然现在能够解决燃眉之急,但还是要解决TDBLookupComboBox->Text访问的问题,分不够我还可以再加,希望大家能多指导一下。
scottlai 2008-06-17
  • 打赏
  • 举报
回复
啊,那咋办好呢?我现在是用曲线救国的办法,在验证类添加了一个接受函数传值的验证方式,而那个函数就直接调用cbWhs->Text这样来返回内容。但是这样做居然返回不了。附代码:
class TXValidateRuleItem : public TPersistent
{
private:
....

protected:

public:
typedef AnsiString (__closure *RegFunc)();
....
//函数接口
RegFunc CustomRegFunc;
__fastcall TXValidateRuleItem(RegFunc FuncName, AnsiString Message, TXValidateRuleType Type, AnsiString Format);
__published:

};

//自定函数式校验类型初始化
__fastcall TXValidateRuleItem::TXValidateRuleItem(RegFunc FuncName,
AnsiString Message, TXValidateRuleType Type, AnsiString Format)
: TPersistent()
{
//TODO: Add your source code here
this->_bindType = btFunction;
if (FuncName == NULL) throw "TXValidateRuleItem ERROR: NULL function set!";
this->CustomRegFunc = FuncName;
this->Message = Message;
this->Type = Type;
this->Format = Format;
}


AnsiString __fastcall TXValidateRuleItem::GetvalValue()
{
//TODO: Add your source code here
AnsiString ret = "";
switch(_bindType)
{
...
case btFunction:
ret = CustomRegFunc();
default:
break;
}
return ret;
}

我在TPurchaseForm里面调用:
void __fastcall TPovForm::FormCreate(TObject *Sender)
{
TVoucherForm::FormCreate(this);

sbCust->SB_Type = FS_VENDOR;
sbCust->SB_ResultField = "cust_id";
sbCust->SB_DataField = "cust_id";

//控制器数据集绑定
......
//绑定网格
......
//Controller->SetGridDataSource((gdsDetail);
//控制器与界面数据感知控件绑定
......
//设置表单校验规则
Controller->AddRule((TXValidateRuleItem::RegFunc)&GetWhsName, "请选择一个进货仓库", rtRequired, NULL);

//控制器初始化
Controller->InitialController();

//执行校验
Controller->ValidateCheck();
}

AnsiString __fastcall TPovForm::GetWhsName()
{
//TODO: Add your source code here
return PovForm->cbWhs->Text;
}

我在GetWhsName()设置断点然后观察cbWhs->Text,是有值输出的,再按F8跳回GetvalValue()内,发现ret居然是NULL,真的是太奇怪了,搞不懂为什么会这样?请高人指点呀。

内容概要:本文详细阐述了现代汽车电子电气架构(EE架构)中的整车拓扑与域划分设计规范,重点介绍中央计算单元(CCU)、区域控制器(Zone)及五大核心域(智驾域、座舱域、车身域、动力域、底盘域)的架构定义、功能职责、关键技术要求与演进趋势。文章强调“逻辑归域、物理归Zone”的分层设计理念,解析了各域在不同架构形态下的协同机制与接口关系,涵盖算力配置、功能安全(ASIL等级)、信息安全、电源管理、通信架构等关键要素,并展望舱驾融合、线控化、800V高压平台、端到端智驾等未来发展方向。; 适合人群:具备汽车电子、车辆工程或相关专业背景,从事EE架构、域控制器开发、整车系统设计等工作1-5年的工程师和技术管理人员。; 使用场景及目标:①指导整车EE架构的设计与优化,明确域与Zone的职责边界;②支持域控制器选型、算力规划与安全等级定义;③推动平台化、标准化架构落地,提升系统集成度与可扩展性;④把握智能化、电动化趋势下的技术演进方向。; 阅读建议:此资源技术深度较高,建议结合实际项目背景阅读,重点关注各域的接口定义、安全要求与架构演变路径,宜配合系统架构图、信号流图等工具辅助理解,并在团队内开展专题研讨以促进共识形成。

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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