BCB中用Sender参数实现代码重用

BCB中用Sender参数实现代码重用,第1张

BCB中用Sender参数实现代码重用,第2张

考试编辑器整理C++编程知识。

面向对象编程工具的一个特点是提高代码的可重用性,博兰的BCB当然可以做到。众所周知,在BCB,大多数程序代码都直接或间接地对应于一个事件。这个程序叫事件处理程序,其实就是一个进程。从应用工程到窗口、组件和程序,BCB强调开发过程中每个层面的可重用性。它可以充分利用写出来的代码,减少工作量,让你的程序更漂亮。代码段之间的共享与事件发生的控件有关,需要根据控件类型进行处理,所以会用到Sender参数。

每个函数的开头形状如下:

void _ fast call t form 1::button 1 click(to object * Sender)

Sender是一个TObject类型参数,它告诉BCB哪个控件接收到该事件并调用相应的处理过程。通过将Sender参数与if语句或case语句匹配,我们可以编写一个事件处理程序来处理多个组件。在Delphi中,IS可用于测试发送方类型或AS可用于类型转换。BCB,我们只用dynamic_cast来做上面两个任务。这里解释一下dynamic_cast的用法。

Dynamic_cast可以强制一个对象进入另一个类。这里所谓的强制还是有其局限性的,就是如果类不能被转移,系统就不会进行转换操作。如果类型转换失败,则返回一个值为0的指针。如果参数t是引用类型,类转换失败,系统会抛出异常处理消息:Bad_cast。但是你可以放心,这样不会导致系统崩溃,你可以放心使用。它的程序:

动态转换(ptr)

t参数必须是指针、void*或已定义的类,而ptr参数必须是指针或引用。如果T的类型是void*,那么ptr可以访问最低类中的任何成员,当然这不会是基类。

做出判断

我们使用dynamic_case来测试Sender,以便找到调用该事件的处理程序或组件的类型。比如我们把窗口中编辑框和标签的Click事件的句柄指向窗口的xxx函数(其实你只需要把一个控件的Click事件命名为xxx并在里面写共享代码,其他控件的Click事件都指向xxx)。本例中的编辑框和标签对Click事件有不同的响应,代码如下:

void _ _ fast call t form 1::XXX(to object * Sender)

{

if(dynamic_cast(Sender))

ShowMessage(\ "这是一个编辑框\ ");

if(dynamic_cast(Sender))

ShowMessage(\ "这是一个标签\ ");

}

当然,如果多个同类组件只是想共享一个事件,那就比这个简单多了。例如,如果您有许多编辑框,并且希望在输入时清除空某个项目,您只需编写一个OnEnter事件:

void _ _ fast call t form 1::edit 1 enter(to object * Sender)

{

TEdit *Edittemp=(TEdit*)(发送方);//统一不同的编辑框

edit temp-> Text = \ " \ ";

}

其他编辑组件的OnEnter事件都指向Edit1Enter,就这样。试一下,鼠标放在编辑框后空 j清零清楚吗?实际上,在这里,我们只是统一了不同的编辑框(发送者清楚地知道是哪个编辑框),这样就可以用一个公共事件来处理它们。当您与相同的组件共享相同的事件时,您必须注意这一点。

2.力类型转换

将继承同一父类的几个子类强制转换为父类。例如,窗口中有一个TEdit类控件和一个TMemo控件,这两个控件实际上都是从TCustomEdit类继承而来的。如果希望为两者的事件提供相同的处理,可以将两者的事件句柄指向自定义函数yyy。我们这里还是在OnEnter事件(当然其他事件也可以):

void _ _ fast call t form 1::yyy(to object * Sender)

{

dynamic_cast(*Sender)。Text=\ "这是一些演示文本\ ";

}

或以下格式:

void _ _ fast call t form 1::yyy(to object * Sender)

{

dynamic_cast(Sender)->Text=\ "这是一些演示文本\ ";

}

注意两者的区别。事实上,这就是“.”的区别和“->”。仔细尝一尝就知道了。

上面两个程序都是先强制将TEdit类和TMemo类转换成TCustomEdit类,再给其父类的属性赋值。

Sender参数可以通过一个功能段处理多种组件,真正体现了BCB面向对象的可重用性。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » BCB中用Sender参数实现代码重用

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情