我编写的自定义控件怎样获得Form上的其他控件列表?(200分)

  • 主题发起人 主题发起人 blackbeam
  • 开始时间 开始时间
B

blackbeam

Unregistered / Unconfirmed
GUEST, unregistred user!
如:DBGrid中有一个数据源列表,能感知当前Form中的所有数据源控件,就是这个意思。
 
不明白什么意思。
 
for i:=0 to form1.commponentcount-1 do
if form1.commponents is Tdatasource then
listbox1.items.add(form1.commponents.name);

就这么简单
 
1、找到你的控件所在的FORM
var
AComp: TComponent;
begin
AComp := MYCOMP.Parent;
while not (AComp is TForm) do
AComp := AComp.Parent;
end;

2、找到Form所拥有的所有数据源控件
A、枚举所有控件
用递归的方法根据Components属性遍历每一个Component
B、判断是否是数据源控件
可以通过是否有DataSource属性判断。

完毕。
 
不明白你真正的用意!
 
我的意思就是:
大家应该知道TDataSource这个组件吧,它有一个属性是DataSet,是一个列表,列出当前
Form中的所有TDataSet控件,用户可以选择其一为该属性值。
我也想做一个类似的控件,它的某个属性可以获得当前Form中指定类型的组件列表,由用
户选择其一赋值给这个属性。
 
我的程序就是这个作用呀(见上)
if form1.commponents is Tdatasource //将Tdatasource换成你所需组件
 
myname,我看了你的代码了,但是一直有一个疑问,把某一类控件名加入到列表中,是可以的
但是,这些工作是在Form1的设计期完成的啊,而不是运行期。也许我没明白你的意思,可以
把你做的类似控件给我学习一下吗,我的邮箱是:blackbeam@21cn.com.
 
你是想在设计期加还是运行期加,我的代码是在运行期加。
 
先要說明一個觀念, TDataSource的屬性Dataset並不是一個列表, 它的屬性的型態是
TDataset, 也就是它可以被設定為某一個TDataset實例

如果是製作TComponent控件, 要在設計時期該某個屬性出現Form上某類控件的列表, 只
要將該屬性宣告為該類的型態, 在設計時,就自動有該功能
如果想要在運行期設置這樣的功能, 樓上所說就對了!
 
不说不知道,我困惑了这么久。
是不是还需要重载Notification(AComponent: TComponent; Operation: TOperation);
这个方法使对应控件形态改变或删除时,做相应的处理。我不知道如何写,我想问在哪本
书里写了相关的内容,我手里的资料没有这方面的内容。还请LordEric指教。
 
Notification只是在通知控件, 有一個控件被釋放(Free)或加入到Form中
其實寫Notification很簡單, 你可以參考TDBEEdit的Source Code,
要注意的配套的函式為
FreeNotification //將控件加入到彼此的釋放通知(即在釋放要通知對方)
RemoveFreeNotification //將控件從彼此的釋放通知中移除(即在釋放時不通知彼此)
你可在DBCtrls中找尋該這兩函式, 以瞭解運用的時機
 
FD:Tdatasource

property d:TDatasource read fd write fd;

我想这才是你需要的吧?
 
后退
顶部