如题 我想在窗口中将所有是button类型按钮 放到数组中,中间要有个这样的判断语句 我对控件不是很清楚他们是怎么判断 最好能举个列子 谢了

也可用

C/C++ code
if(dynamic_cast<TButton*>Form1->Components[i]) { TButton *pBtn=(TButton*)(Form1->Components[i]); // ….. }

刚才我试了下 发现[jxw1987628]的代码给我了点想法,
我打算使用TWinControl这样操作
for(int I=0;I <this->ControlCount;I++){
                TWinControl *Temp=dynamic_cast <TWinControl *>(this->Controls[I]);
                if(Temp->ClassNameIs("TButton"))
                        ShowMessage("呵呵终于找到你了Button");
}
结果给我报了地址引用错误。我不明白了

你应该用TComponent
大概如下

C/C++ code
if ( ComponentCount > 0 ) { for ( int i = 0 ;i< ComponentCount ;i++ ) { Temp = Components[i]; if (Temp->ClassNameIs("TForm2")) { ShowMeaasge( dynamic_cast<TForm2 *>(Temp)->Caption ) } } }

引用 3 楼 loxiro 的回复:
刚才我试了下 发现[jxw1987628]的代码给我了点想法,
我打算使用TWinControl这样操作
for(int I=0;I <this->ControlCount;I++){
                TWinControl *Temp=dynamic_cast <TWinControl *>(this->Controls[I]);
                if(Temp->ClassNameIs("TButton"))
                        ShowMessage("呵呵终于找到你了Button");
}
结果给我报了地址引用错误。我不明白了

你的用法不对,先看看dynamic_cast的意义!,

用dynamic_cast是标准的用法,原因是:如果我声明了TMyButton:TButton,那么用ClassNameIs就会失败,但是用dc用dynamic_cast就不会。

既然都用dynamic_cast了,那就不需要ClassNameIs了,直接

C/C++ code
for(int I=0;I <this->ControlCount;I++){ if(dynamic_cast <TButton*>(this->Controls[I])) ShowMessage("呵呵终于找到你了Button"); }

感谢大家的帮忙 dynamic_cast我知道怎么用了 难道我下次遇到个checkbox DBGrid 都要用dynamic_cast来转换.本着对技术或知识的追逐我还是想问下Components和TWinControl 有什么区别阿 为什么我用TWinControl 就不能像1楼和2楼那样操作呢

象按钮,下拉框这种Windows里自带的控件,VCL对它做了一个包装,这些都是从TWinControl继承的
另外还有更多的是VCL自己特有的组件,如TImage,TDataSource,TIdFTP等等。
而所有的VCL组件(可以从面板上拖拉的,当然也包括前面说的TWinControl)都是从TComponent继承的。
A->Controls是查找Parent是A的控件,A->Components是查找Owner是A的控件。
说得不周到之处后面补充哈

是不是TButton
Object->ClassNameIs("TButton");
是不是继承于TButton
Object->InheritsFrom(__classid(TButton));//相当于Delphi的Object Is TButton

to(Waiting4you);让我看到一丝曙光
刚从帮助中发现,也不知道我这样理解的可以不,TButton是从TButtonControl那继承,TButtonControl又是继承自TWidgetControl,后再继承于TControl ,这样一层一层继承TControl <-TComponent <-TPersistent <-TObject.
而我拖出来的一个Button难道是从TButton的一个对象吗?这样只要是基类对子类动态调用都可以从判断中得到是不是TButton的类型,另外让我发现 使用的ClassNameIs(const AnsiString string)方法是由TObject定义的,TObject? TObject?他是干什么的呢?还有他定义的一些方法?很怪!
我只能说自己开始刚接触bcb,不过这里的继承使用的让我眼花缭乱,我还是想知道这写基础类的作用,不知道那位能帮我说说。感觉顿顿的,需要有人来捅下,才能清醒。

先学好C++基础,了解虚方法