首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TDataSource后代作为SubComponent的无效属性路径错误

TDataSource后代作为SubComponent的无效属性路径错误
EN

Stack Overflow用户
提问于 2011-08-22 02:48:55
回答 2查看 1.4K关注 0票数 3

我正在设计一组数据控件,这些控件包含自己的数据库访问权限。因此,我创建了一个具有附加属性的TDataSource后代,它可以将自己附加到数据库并创建数据集等.

如果我把它作为DBLookupComboBox附加到ListSource上,一切都很好。但是,如果我尝试将这个Datasource创建为DBLookupComboBox的一个子组件,并将其指定为ListSource,我就可以得到一个渔获-22

我希望DataSource的属性与DBLookupComboBox一起流,我希望将DBLookupComboBox的ListSource设置为DataSource子组件,但我似乎不能两者兼而有之。当DBLookupComboBox被流时,DataSource的附加属性将被包含两次,一次(正确)在DataSource属性下,一次在ListSource.Property1下,最后一次将在加载组件时导致“无效的属性路径”,即使DataSource是预先创建的(和注册等)。

如果一个TDataSource是子组件,只要它有一些非默认属性(即标记),就会发生同样的情况。

我试图设计一个存储函数,允许DataSource属性流,但不允许ListSource属性流,但没有成功。

如能就如何开展这项工作提供任何帮助或指导,我将不胜感激。

DFM (片段)看起来像

代码语言:javascript
复制
object PmDCB1: TPmDCB
  Left = 384
  Top = 160
  Width = 145
  Height = 24
  ListSource.Tag = 222
  TabOrder = 0
  ViewName = 'VAR'
  WindowName = 'WNE'
  View.Tag = 222
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-27 10:22:54

你试过像下面这样的东西吗?

代码语言:javascript
复制
type
  TMyDBLookupComboBox = class(TDBLookupComboBox)
  private
    FListSource: TMyDataSource;
  protected
    procedure Notification(AComponent: TComponent; Operation: TOperation);
      override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property ListSource: TMyDataSource read FListSource;
  end;

constructor TMyDBLookupComboBox.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FListSource := TMyDataSource.Create(Self);
  FListSource.SetSubComponent(True);
  FListSource.Name := 'ListSource';
  FListSource.FreeNotification(Self);
  inherited ListSource := FListSource;
end;

procedure TMyDBLookupComboBox.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if (Operation = opRemove) and (AComponent = FListSource) then
  begin
    FListSource := nil;
    inherited ListSource := nil;
  end;
end;
票数 0
EN

Stack Overflow用户

发布于 2011-08-27 04:33:03

好的--最终找到了一个有效的答案--覆盖DBLookupComboBox的WriteState过程,并将ListSource设置为零,然后调用inherited,然后再将ListSource设置回原来的位置。不太丑,这是我唯一能在一周的挖掘中找到的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7142717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档