奇怪的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)的时候,却又能显示选项值。

请各位帮帮忙解答一下,谢谢。
...全文
171 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,真的是太奇怪了,搞不懂为什么会这样?请高人指点呀。

摘 要 随着互联网影视产业的迅速发展,电影资源呈指数级增长,类型也愈加多样化,但是用户面对如此庞大的影片库时,会遇到信息过载、筛选效率低下、观影决策成本高这些难题,而传统的电影平台大多只是对基本的分类和热度进行展示,并没有提供个性化的推荐服务,社交互动以及一体化管理的能力也比较薄弱。 该系统使用的是Spring Boot+Vue前后端分离的方式进行开发,设计并开发了一个电影推荐和评论系统。开发系统中存在三个问题,即无法准确地判断出用户的喜好、电影推荐功能上线之初没有用户数据,因此推荐效果不佳、大量用户同时评论打分时系统容易出现不稳定的情况。为了克服上述问题,本文查阅相关资料,不断迭代开发原型,并进行实际测试,完成整个系统的全部过程,即系统需求分析、架构设计、功能开发、系统测试。系统分为普通用户和管理员两种身份,具有注册登录、电影浏览、电影推荐、评分评论、影片收藏、个人中心、后台管理等功能,采用结合用户喜好和电影热度的简单推荐方式,提供热门电影推荐和个性化推荐,很好地解决了推荐功能初始没有数据、数据较少的问题。项目用接口来完成前后端的数据交互,使用MySQL数据库存储用户、电影、评论、收藏等各种数据,并且加入权限验证、密码加密等安全措施,保证系统安全稳定并且便于后期扩展。除此之外,系统还增加了电影资讯查看、首页轮播图设置、编辑资讯等功能,使整个电影平台的服务更加全面,使用更加高效。经过全面的功能测试、接口测试和性能测试,系统各个模块运行稳定,推荐接口响应时间小于300ms,主要的互动操作成功率大于98%,可以大大降低用户的选片成本,提高观影决策的速度和社区互动的效果。 本文给出一套轻量级、易部署、可复用的电影推荐类Web应用工程实现方案,相比于传统的单一列表展示型平台,个性化服务、社交互动体验和后台管理效率都有明显的提高,可以给影视文化数字化传播、推荐算法轻量化工程实践

1,178

社区成员

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

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