工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > VB > 正文
在VB6中用命令行为模式控制GUI动作
[文章信息]
作者:陶刚编译
时间:2005-02-17
出处:天极网
责任编辑:方舟
[文章导读]
命令行为模式是我们可以使用的一种简单模式,它在行为概念的具体化和撤销行为方面显得尤其有益
advertisement
热点推荐
· Excel图表向导详解
· 2月16日软件精选 春节文章精彩回顾
· 轻松玩转Excel数据图表
· Win XP系统如何快捷地整理硬盘碎片
· ASP.NET中用healthMonitor属性用法
[正文]

1 2 3  下一页

  命令行为模式(Command Behavior pattern)允许你在表现层(presentation layer)封装行为,使得采用自己喜欢的方法组织、跟踪、撤销和调用这些行为更加容易。

  在现实生活中,次序是难以控制的。一旦某种东西处于运动状态,我们就很难操作这种动作的离散部分。当然,在现实生活中是不可能撤销某种动作的。但是在编程过程中,次序却不是难以琢磨的。如果你的计划是正确的,你就可以定义行动,接着用你喜欢的方式来控制这些行动。实现这种操作的一个非常有用的工具是命令行为(Command Behavior)模式。

  命令行为模式是我们可以使用的一种简单模式。它在行为(action)概念的具体化和撤销行为方面显得尤其有益。把行为转换到对象中也是一条非常有序的途径,它可以确保每个操作都会集中在实现该操作的一部分代码上。

  在本文中我们将研究命令行为模式的使用方法,你会感觉它比较有趣。我给窗体添加了一个球的图片,并且实现了表现球的移动过程的命令。每个球命令都被放入栈中,允许你撤销球的移动,或者重新查看球的移动。在稍微修补一下代码之后,你可以发现把表现层(GUI)的操作转换为命令对象使得我们使用多种方式(例如按钮和菜单)封装、组织、跟踪、撤销和调用操作容易多了。

  定义命令(Command)类

  实现命令行为的一个普通的途径是定义一个带有Do和Undo方法的基类(或接口)。Undo执行与Do操作相反的行为。Do操作是什么样子都无关紧要,它可以是任何东西("Do"在VB6中是保留字,因此我把"Execute"作为方法的名字)。

  我的例子实现了四个移动命令。每个命令从上下左右四个方向中选择一个方向执行移动操作。每个命令的Undo操作采用相反的方向调用移动操作。很明显,我并没有限定两维的、直线方向。我可以模拟三维的或者三角法(trigonometric)运算规则的基本移动。现在我聚焦于该命令类。

  使用公用基类的原因在于代码可以多形态地(polymorphically)调用Do或Undo操作,而不用关心命令对象的特定实例。列表1显示了基本的命令和所有四个衍生命令类的实现。由于VB6不支持类继承,我就使用了接口继承。

  列表1

' ICommand.cls
Public Sub Execute()
End Sub

Public Sub Undo()
End Sub

Public Property Set Form(ByVal Form As Form1)
End Property

' DownCommand.cls
Option Explicit
Implements ICommand

Private FForm As Form1

Private Sub ICommand_Execute()
 FForm.MoveDown
End Sub

Private Sub ICommand_Undo()
 FForm.MoveUp
End Sub

' LeftCommand.cls
Public Property Set ICommand_Form(ByVal Form As Form1)
 Set FForm = Form
End Property

Option Explicit
Implements ICommand

Private FForm As Form1

Private Sub ICommand_Execute()
 FForm.MoveLeft
End Sub

Private Sub ICommand_Undo()
 FForm.MoveRight
End Sub

Public Property Set ICommand_Form(ByVal Form As Form1)
 Set FForm = Form
End Property

' RightCommand.cls
Option Explicit
Implements ICommand

Private FForm As Form1

Private Sub ICommand_Execute()
 FForm.MoveRight
End Sub

Private Sub ICommand_Undo()
 FForm.MoveLeft
End Sub

Public Property Set ICommand_Form(ByVal Form As Form1)
 Set FForm = Form
End Property

' UpCommand.cls
Option Explicit
Implements ICommand

Private FForm As Form1

Private Sub ICommand_Execute()
 FForm.MoveUp
End Sub

Private Property Set ICommand_Form(ByVal RHS As Form1)
 Set FForm = RHS
End Property

Private Sub ICommand_Undo()
 FForm.MoveDown
End Sub

  请注意在列表1中ICommand使用了前缀I。这是接口的一个通俗的前缀符号,在多种语言中被广泛的应用。它的目的是帮助读者记住该模块只包含定义。同时还要注意所有的方向命令中都使用了Implements语句。这确保了每个类最少拥有ICommand接口。其结果是我可以定义一个ICommand变量,并给它指定实现了ICommand类的任何实例。

  最后我还要指出,每个命令都保持了特定的Form(Form1)的指针。其原因在于Form1包含了自己的边界和我希望用命令操作的控件的信息。


1 2 3  下一页

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • VB设计Win2000下截获IP数据包程序
  • 真没想到VB也可以这样用之VB能做什么
  • 用VB编写异步多线程下载程序
  • 适合Visual Basic初学者的10个小技巧
  • 用VB实现实时曲线的绘制和保存
  • 中国IT企业走进欧盟 搭第六框架计划直通车
  • 美邦银行用户注意 警惕新型“钓鱼”邮件
  • 微软三年时间磨出新IE 具有更强大安全性能
  • 高清碟机标准打内战 HDV将状告EVD恶性竞争
  • 正版网上银行为何不安全 客户泄密银行无责任
  • 惠普铁娘子悲壮退场 未能成功扮演拯救者
  • 网上乱用人民币图样是违规行为 最高罚3万
  • “伟哥”要正名 微软携手辉瑞打击假“伟哥”
  • Advertisement

    天极无线


    奇妙科幻|美好风光|清风车影|漫画卡通|星座生肖|明星写真|动物世界
    老鼠爱大米
    挥着翅膀的女孩
    女人味
    栀子花开
    白月光
    刚刚好
    江南
    快乐崇拜
    亲爱的你怎么不在我身边
    小薇
    2002年的第一场雪
    有多少爱可以重来
    我的地盘
    七里香
    情人
     
    老鼠爱大米 老板电话
    冲动的惩罚 七里香
    我不是黄蓉 女生撒娇
    盛夏的果实 坚持到底
    孤单北半球 眉飞色舞
    挪威的森林 可爱女人
    最浪漫的事 老板电话

    CSEEK搜索