delphi中command/action的疑惑
2004-09-17 13:48
141 查看
在看了一大堆提到界面和代码分离的理论以后,不知道大家对command/action模式到底是怎么理解的?我在此也有如此疑问,一般情况下在dlephi中一提到command/action 模式,第一个想到的就是TActionList,TActionManager等一系列的action控件,然而似乎delphi控件的设计方式或者说事件件调用方法本身就是以command/action模式来进行设计的。也就是说不必去刻意的追求command/action模式而是在一般的编码是注意一些我看就足够了。
就我的理解以TButton的OnClick事件来说。
一般情况下,在我们的程序重要想定义这个事件直接双击该控件然后再写代码就是了,例如:
procedure TForm1.Button1Click(Sender: TObject);
begin
...;
end;
可能有人会认为这样代码和界面耦合就比较严重了因为这个函数实际上和界面混合在一起了.以后要是修改界面的话就会很麻烦了。
可是我却不这么认为,就以下为例吧:
要是想用另一个button2(或是一个menuitem或是其他的一个command事件)来实现这个功能,我可以让button2的OnClick事件指向指向Button1Click就行啊。并且在修改的时候也只是维护Button1Click这一份代码阿?
或者在其次我在button2的初始化的时候(因为button2可以动态创建)令button2.OnClick := Button1Click就行啊,我为什么要一定来实现这个所谓的TAction呢?
再说道对界面的控制,用TAction 的对象可以对界面对象进行一些简单的操作,可是在一般情况下我也可以通过调用函数的sender参数来完成相同的工作阿,比如我想让所有的调用了button1Click的空间都消失我可以这样做:
if Sender is TControl then
TControl(Sender).Visible := false;
这和调用TAction.Visible并没什么区别.
就我的理解以TButton的OnClick事件来说。
一般情况下,在我们的程序重要想定义这个事件直接双击该控件然后再写代码就是了,例如:
procedure TForm1.Button1Click(Sender: TObject);
begin
...;
end;
可能有人会认为这样代码和界面耦合就比较严重了因为这个函数实际上和界面混合在一起了.以后要是修改界面的话就会很麻烦了。
可是我却不这么认为,就以下为例吧:
要是想用另一个button2(或是一个menuitem或是其他的一个command事件)来实现这个功能,我可以让button2的OnClick事件指向指向Button1Click就行啊。并且在修改的时候也只是维护Button1Click这一份代码阿?
或者在其次我在button2的初始化的时候(因为button2可以动态创建)令button2.OnClick := Button1Click就行啊,我为什么要一定来实现这个所谓的TAction呢?
再说道对界面的控制,用TAction 的对象可以对界面对象进行一些简单的操作,可是在一般情况下我也可以通过调用函数的sender参数来完成相同的工作阿,比如我想让所有的调用了button1Click的空间都消失我可以这样做:
if Sender is TControl then
TControl(Sender).Visible := false;
这和调用TAction.Visible并没什么区别.
相关文章推荐
- 疑惑:如何用hql语句查询前10条数据??求解!!!
- OSPF四类和五类LSA及路由重分发后的路由表的显示问题疑惑
- 六个问答解除DNS疑惑
- 解决困惑已久的“接口”与“抽象”疑惑——力荐《php 接口类与抽象类的实际作用》【收藏】
- hashcode 的疑惑
- 性能测试分析之带宽瓶颈的疑惑
- BGP之联盟 疑惑
- Visual Studio 2005 下 ASP.net Web Service SOAP XML 节点的疑惑
- 令人疑惑的defaultValueAttribute
- 年轻创业公司的疑惑
- 学习《TCP/IP详解》遇到的问题与疑惑
- 关于LinkedList和ArrayList 插入元素的性能比较疑惑,知道的请指教......
- 设备VLAN的疑惑??
- 几个令刚学会控制台转到Windows界面编程疑惑的变量
- 关于Java的几点疑惑:枚举
- [IOC] StructureMap的疑惑。
- 关于反射的疑惑
- RS232电平和TTL电平,疑惑
- LSIP 疑惑1
- Vmware网络桥接模式共享windows宽带连接的疑惑