首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

BCB中对于多个组件的平添事件,有没有不用手动添加的方法,比如使用类似循环的方法

2013-01-09 
BCB中对于多个组件的添加事件,有没有不用手动添加的方法,比如使用类似循环的方法比如我在工程中添加了100

BCB中对于多个组件的添加事件,有没有不用手动添加的方法,比如使用类似循环的方法
比如我在工程中添加了100个EditBox组件,我想给每个EditBox组件添加OnChange事件,在OnChange事件改变EditBox组件的Text属性,比如:
void __fastcall TForm::Edit1Change(TObject *Sender)
{
    String str=Edit1->Text;
    if(str.Length()>30)
        a->Text="";
}
我的问题有两个,第一是如何不用手动一一添加100个EditBox组件,而是使用一种快速的添加方法?
我尝试过全部选中这100个EditBox组件,如何在对象监视器中添加OnChange事件,但是没有添加100个OnChange事件,而是这些组件的事件都指向了第一个选择的组件的OnChange事件,这样只能改变Edit1->Text

第二是组件的名称是固定的,对100个组件进行操作,我的方法只能是使用100个组件的Name->属性等,请问有没有方法能简化程序书写
比如:
SetStructL(CheckBoxa1,CheckBoxb1,Editc1,Editd1);
SetStructL(CheckBoxa2,CheckBoxb2,Editc2,Editd2);
...
SetStructL(CheckBoxa100,CheckBoxb100,Editc100,Editd100);
有没有简化的程序书写方法

[解决办法]
至于其他99个控件用这个事件,
可以设计时多选控件,在onchange事件时选择指定到Edit1Change。
也可以动态用代码指定。


void __fastcall TForm1::FormCreate(TObject *Sender)
{
   this->Edit2->OnChange = this->Edit1Change;
   this->Edit3->OnChange = this->Edit1Change;
   。。。
}

[解决办法]
1。设计时给这100多个组件同时指定一个事件是可以的,但是必须得先有一个事件处理函数比如Edit1Change存在。然后选中多个Edit,在Event页面上点击OnChange事件的下拉框,选择Edit1Change就可以了。这是设计时指定。还可以运行时指定事件,因为你的组合命名是依次递加的规则,可以在一个循环中为多个组件指定事件处理函数,如:
TEdit *edt;
for (int i = 0; i < 4; i++)
{
    edt = (TEdit *)FindComponent(String().sprintf(TEXT("Edit%d"), i + 1));
    if (edt)
    {
        edt->OnChange = Edit1Change;
    }
}


至于第二个问题,相信楼主看一下上面的代码,你自己就会写了。

热点排行