BCB高手进阶  (十)用Sender参数实现代码重用

原创 2003年07月11日 06:41:00

BCB高手进阶

(十)用Sender参数实现代码重用

nxyc_twz@163.com

      面向对象的编程工具的特点之一就是要提高代码重用性(Reuse),BCB当然可以实现这一功能。我们都知道,在BCB中,大部分程序代码都直接或间接的对应着一个事件,此程序称为事件处理句柄,它实际上就是一个过程。从应用程序的工程到窗口、组件和程序,BCB强调的是其开发过程中每一层次的重用性,可以充分利用已编写过的代码来减少工作量,更会使你的程序变得优美。代码段间的共享都跟发生该事件的控件有关,需要根据控件类型做出相应的处理,这时就要用到Sender参数。

每个函数的开头都有形如:
void _fastcall Tform1::Button1Click(TObject *Sender)

其中的Sender是一个Tobject类型的参数,它告诉BCB哪个控件接收到这个事件并调用相应的处理过程。我们可以编写一个单一的事件处理句柄,通过Sender参数和if语句或者case语句配合,来处理多个组件。在Delphi中可以用IS来测试Sender类型,或者用AS进行类型转换,BCB我们只在用dynamic_cast来进行上面两个工作,下面把dynamic_cast的用法说明一下。

dynamic_cast 可以把某种对象强制转成另一个类,类型转换成功则返回一个值是0的指针,失败则丢出一个异常处理信息:Bad_cast,但你放心不会导致系统死机,所以可以放心使用。其程式:
dynamic_cast <T> (ptr)
T参数一定要是一个指针、void 、或是已经定义过的类,而ptr参数则必须是一个指针(pointer) 或是一个引用(reference)。如果T的类型是void,那么ptr则是一个可以访问最下面类里的任何成员,当然这样的类将不可以是基础类。

1.进行判断
我们用dynamic_case来测试Sender,以便找到调用这个事件的处理句柄或组件的类型。如,并窗口编辑框和标签的Click事件的处理句柄都指向窗口的xxx函数,编辑框和标签对Click事件有不同的反应:
void _fastcall TForm1::xxx(Tobject *Sender)
{
if(dynamic_cast<TEdit *>(Sender)
showmessage(“This is a editbox”);
if(dynamic_cast<TLabel *>(Sender)
showmessage(“This is a label”);
}

2.强制进行类型转换
将若干继承同一父类的子类强制转换成该父类。如窗口中有一个TEdit类控件和一个TMemo控件,它们实际上都继承于TCustomEdit类,如果你要为二者的某一事件提供同样的处理,可以将二者事件句柄都指向自定义的函数yyy:
void _fastcall TForm1::yyy(Tobject *Sender)
{
dynamic_cast<TCustomEdit *>(Sender).text=”This is some demo text”;
}
在这里,先把TEdit类和TMemo类均强制转换成TCustomEdit类,再对其父类的属性进行赋值。
使用Sender参数可以通过单一函数段处理多类组件,真正体现了BCB的面向对象的重用性。

相关文章推荐

BCB中用Sender参数实现代码重用(修正版)

关键字:C++Builder,Sender参数,代码重用,Tobject类型,dynamic_cast,ch_builder作者:ch_builder    更新:2003-06-12    浏览:5...

二叉树的基本操作 C++代码实现

首先定义节点typedef struct BTree { int value; struct BTree *lchild; struct BTree *rchild; }...

Java Condition 的await(), singal(), singalAll() 具体代码实现分析,

前面本博的JavaJava 同步监视器中的 wait() 和 notify() 方法的具体实现 讨论了Java Syncronized关键字中,同步监视器的wait(),notify(),notify...

vray参数 详解

  • 2014年06月26日 13:20
  • 52KB
  • 下载

linux c 利用指针将函数传出参数的值

摘抄http://blog.csdn.net/KISS_BEN/article/details/8157168   首先标准的C语言中没有引用传参,而只有传值传参和地址传参俩种,但现在由于编...

程序员如何成长1 高手忠告

  • 2007年08月24日 12:47
  • 34KB
  • 下载

C# 查询参数化例子

  • 2008年10月28日 08:02
  • 35KB
  • 下载

Tensorflow使用笔记(1) 怎么保存和使用训练好的参数和模型

在TensorFlow中遇到的问题1如何保存好训练的结果:最近在学习Tensorflow 构建CNN,训练需要耗费时间,把训练好的各个参数保存下来是最简便的,网上有很多教程 假设会话为sess,计算...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BCB高手进阶  (十)用Sender参数实现代码重用
举报原因:
原因补充:

(最多只允许输入30个字)