如何得知某个控件更改自己的名称?(100分)

  • 主题发起人 主题发起人 yansea
  • 开始时间 开始时间
Y

yansea

Unregistered / Unconfirmed
GUEST, unregistred user!
当某个控件被改名的时候,我想得到这个消息。该怎么做呢?
 
好象没有这种事件哦。你具体想做什么?可以说说看吗。
 
可能比较麻烦,我尽量说清楚。
我自己定制一个控件(TMyComponent),在设计期要与其他控件相关联,不过这种关联不同于
TDataSource那样的关联。
就是说,TMyComponent可能会同时记录n个控件的信息(或者说针对每一个控件有一个保存
其信息的类 TMyControls)。但是在设计期某个已经被记录了控件(如Edit1)改了名字,
我该如何更新自己记录的信息呢,或者说我怎么知道它什么改了名字?
当某个控件被insert或者remove的时候可以利用TComponent的方法解决,但是我怎么也没
找到控件更名的通知。
谢谢!
 
TComponent有SetName函数,是改Name属性用的,是虚函数。
覆盖这个函数,当使用控件的人更改Name属性的时候会调用。
 
TComponent有SetName方法,重载它。或TControl的Changed。
 
to bluebridge
TComponent的SetName我看过了,它是当自己的名字改变时调用的。
并且通过调用ValiDataRename实现,不过这个方法也只是不断的把信息向Owner传,直到窗体。并没有向窗体上的其他控件发送信息呀。
 
谢谢各位先......
我是想知道其他控件改名的信息,不是自己。有没有什么好办法?
比如说TADOQuery关联了TADOConnection,当后者改名时前者也改了(不知道是不是应该这么说)。那么它是怎么得到这个信息的呢?
 
帮帮忙吧,很着急的!!
 
在什么地方得到消息?好像不可能 没有这种机制存在
而且一直向上传达 也只是在设计期间
[red]设计期间Object Inspector的显示也不是即时刷新的[/red] 而且对Component的参考也应该是以指针而不是名字至于DataSet的Field的名称的参考 那也是通过DataSetChange之类的形式实现的 在设计期间 不知道ToolAPI里边是否有相关的内容 但是设计期间 恐怕不太可能 除非你修改这些Component的代码 (建立一个管理通知的类 生命周期为整个系统的生存时间) 然后修改这些Component的SetName的虚函数表中指针 指向一个通用的函数 调用保存的愿来的 并在通知表中间检索进行通知 可行 但需要功力 建议你还是修改思路吧
 
yansea
比如说TADOQuery关联了TADOConnection,当后者改名时前者也改了(不知道是不是应该这么说)。那么它是怎么得到这个信息的呢?

可以考虑覆盖Notification方法,你可以看看TADOQuery组件的Notification方法
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
 
to DeityFox
你应该先验证一下你的说法,TADOQuery组件的Notification方法没什么特殊的,甚至他根本就没有重载Notification
TADOQuery关联了TADOConnection,他在那里得到了这个消息? 根本就没有嘛 你说的那个应该是指的Object Inspector吧 是的话 我在上边也已经说明了 这个根本就不是实时刷新的 他是在某些特定时候进行刷新的 比如Object Inspector 里边你从一个属性切换到另一个属性的时候 而且也许在设计期是可以做到的(利用ToolAPI) 但是运行期绝对没有直接的办法 真的需要的话 用我前边说的方法可能才可行
 
谢谢各位,其实也可以写一个tform的子类,处理设计期的这些问题。不过我只是想更通用一些而已。或者说,真的要改变思路,比如保存控件的指针?
 
自己提一下
 
To zjan521:
谢谢指正! ^0^
 
>>TADOQuery关联了TADOConnection
那么它根本不需要知道TADOConnection改名了,它的显示直接取自TADOConnection.Name就可以了。
 
多人接受答案了。
 
后退
顶部