用户名: 密码: 验证码: QQ--程序群:31736530 动画群:38836599
闪无忧
 
首 页 业界新闻 业界杂谈 Flash教程 Flash源码 Flash图书 Flash酷站 Flex & AIR 供求信息
   本栏目通告:   有意向写收费精品教程的朋友,请联系本站合作
当前位置 :首页>flash教程>Flash as3.0教程>列表

由ActionScript3入Silverlight之事件篇

[来源:圣叹 | 作者:圣叹 | 时间:2008-05-25 | 点击:  | 收藏本文  【 】]
最近在学C#,微软的IDE做的还是极其强悍的。对比ActionScript3学C#很有意思的,万一哪天Microsoft Silverlight真打败了Adobe Flash,有C#还能继续混口饭吃。想起猫和老鼠的故事:“看,这就是多一门语言的妙处”,笑。
事件(event)是Observer设计模式的最佳体现,不论是ActionScript还是C#,事件在其中占据重要位置,尤其是在窗口应用程序中。熟悉ActionScript3的都应该知道几乎所有事件都继承自Event这个类。自定义一个事件也不例外。而在C#中,事件通常是EventArgs的子类:
  1. public class ActionCancelEventArgs : EventArgs   
  2. {   
  3.     string message;   
  4.   
  5.     public ActionCancelEventArgs() { }   
  6.     public ActionCancelEventArgs(string message)   
  7.     {   
  8.         this.message = message;   
  9.     }   
  10.     public string Message   
  11.     {   
  12.         get { return message; }   
  13.         set { message = value; }   
  14.     }   
  15. }  

所不同的是,在类中自定义事件是有区别的。C#中不可以直接将方法作为参数传递,此时需要用到委托(delegate)这一概念。委托是一个特别的类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。C#使用委托主要是出于类型安全的考虑。注意这里定义的委托的参数,前者是一个对象(其实这里传递的是对象的引用,如果是button1的click事件则sender就是button1),表名触发折;后面是包含事件数据的类的基类。比如下面的示例:
  1. public class ActionSample   
  2. {   
  3. //声明委托   
  4. public delegate void ActionEventHandler(object sender, ActionCancelEventArgs eventArgs);   
  5. //声明事件   
  6. public event ActionEventHandler Action;   
  7.   
  8. //处理事件   
  9. protected void OnAction(object sender, ActionCancelEventArgs eventArgs)   
  10. {   
  11.     if (Action != null)   
  12.         Action(sender, eventArgs);   
  13. }   
  14.   
  15. //广播事件   
  16. public void dispatch()   
  17. {   
  18.     ActionCancelEventArgs ev = new ActionCancelEventArgs("An Event was dispatched.");   
  19.     OnAction(this, ev);   
  20. }   
  21. }  

因此,在C#中,声明一个事件类似于声明一个进行了封装的委托类型的变量。似乎由此看来,C#在事件的声明这部分变得异常麻烦。但是带来的结果是添加事件的监听则变得非常简单。如:
  1. ActionSample actionExample = new ActionSample();   
  2. actionExample.Action += onAction;   
  3. actionExample.dispatch();  

毕竟,相比较广播事件,而监听事件更为常用。onAction即监听函数:
  1. private void onAction(object sender, ActionSample.ActionCancelEventArgs eventArgs)   
  2. {   
  3.   //TODO: implemention   
  4. }  


同为Observer设计模式,ActionScript3中的事件则不同。看下面类似的代码:
  1. class ActionCancelEventArgs extends Event   
  2. {   
  3.   public static const ON_ACTION:String = "onAction";   
  4.   public var message:String;   
  5.      
  6.   public function ActionCancelEventArgs( message:String )   
  7.   {   
  8.     this.message = message;   
  9.     super( ON_ACTION );   
  10.   }   
  11. }  

ActionCancelEventArgs事件多了一个参数表名事件类型,这个参数通常是静态常量。与C#的委托相比,这使得监听的过程变得很简单:
  1. package {   
  2.   import flash.display.Sprite;   
  3.   import flash.events.Event;   
  4.      
  5.   public class Action extends Sprite   
  6.   {   
  7.     public function Action()   
  8.     {   
  9.       var actionExample:ActionSample = new ActionSample();   
  10.       //添加监听   
  11.       actionExample.addEventListener( ActionCancelEventArgs.ON_ACTION, this.onAction );   
  12.     }   
  13.        
  14.     public function onAction( event:Event ):void  
  15.     {   
  16.       //TODO: implemention   
  17.     }   
  18.   }   
  19. }   
  20. import flash.events.Event;   
  21. import flash.display.DisplayObject;   
  22. //实例类   
  23. class ActionSample extends DisplayObject   
  24. {   
  25.   public function dispatch():void  
  26.   {   
  27.     this.dispatchEvent( new ActionCancelEventArgs( "message" ) );   
  28.   }   
  29. }   
  30. //实例事件   
  31. class ActionCancelEventArgs extends Event   
  32. {   
  33.   public static const ON_ACTION:String = "onAction";   
  34.   public var message:String;   
  35.      
  36.   public function ActionCancelEventArgs( message:String )   
  37.   {   
  38.     this.message = message;   
  39.     super( ON_ACTION );   
  40.   }   
  41. }  

C#实例代码
  1. using System;   
  2. using System.Collections.Generic;   
  3. using System.ComponentModel;   
  4. using System.Data;   
  5. using System.Drawing;   
  6. using System.Linq;   
  7. using System.Text;   
  8. using System.Windows.Forms;   
  9.   
  10. namespace WindowsFormsApplication1   
  11. {   
  12.     public partial class Form1 : Form   
  13.     {   
  14.         public Form1()   
  15.         {   
  16.             InitializeComponent();   
  17.                
  18.         }   
  19.   
  20.         public class ActionSample   
  21.         {   
  22.             public delegate void ActionEventHandler(object sender, ActionCancelEventArgs eventArgs);   
  23.             public event ActionEventHandler Action;   
  24.   
  25.             protected void OnAction(object sender, ActionCancelEventArgs eventArgs)   
  26.             {   
  27.                 if (Action != null)   
  28.                     Action(sender, eventArgs);   
  29.             }   
  30.   
  31.             public void dispatch()   
  32.             {   
  33.                 ActionCancelEventArgs ev = new ActionCancelEventArgs("An Event was dispatched.");   
  34.                 OnAction(this, ev);   
  35.             }   
  36.   
  37.             public class ActionCancelEventArgs : EventArgs   
  38.             {   
  39.                 string message;   
  40.   
  41.                 public ActionCancelEventArgs() { }   
  42.                 public ActionCancelEventArgs(string message)   
  43.                 {   
  44.                     this.message = message;   
  45.                 }   
  46.                 public string Message   
  47.                 {   
  48.                     get { return message; }   
  49.                     set { message = value; }   
  50.                 }   
  51.             }   
  52.         }   
  53.   
  54.         private void button_Click(object sender, EventArgs e)   
  55.         {   
  56.             ActionSample actionExample = new ActionSample();   
  57.             actionExample.Action += onAction;   
  58.   
  59.             actionExample.dispatch();   
  60.         }   
  61.   
  62.         private void onAction(object sender, ActionSample.ActionCancelEventArgs eventArgs)   
  63.         {   
  64.             this.textBox.Text="On Action";   
  65.         }   
  66.            
  67.     }   
  68. }  
文章如果有错误或者缺少文件,请发邮件提交给我们
上一篇:OAuth Actionscript3 Class Library
下一篇:由ActionScript3入Silverlight之集合篇
Tags:    
>>> 最新评论:(共有 0 位网友发表了评论)      查看所有评论
  发表评论
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
·本站发布内容均为客观表达作者观点,不代表闪无忧立场,请勿攻击和漫骂
·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为
  教程分类
  基础操作   动画特效
  应用开发   组件学习
  As程序   动画教程
  Flash cs3   AS 3.0
  FCS/FMS教程   Loading教程
  Flash与Web   Flash教程连载
  相关文章
·ActionScript 3.0垃圾回收
·Flash上传客户端
·AS3编码转换函数
·flash as3的binding-ObjectProxy
·as3的ComboBox组件应用小问题
·小球的弹性碰撞
·小球的弹性碰撞
·小球的弹性碰撞
·ActionScript 3设计模式类图(二)
·ActionScript 3设计模式类图(一)
  热门文章
·Flash进度条的制作详细讲解(组图)
·flash幻灯片网页效果
·Flash打造简单的飘雪动画视觉特效
·Flash旋转拖尾文字效果的制作教程
·flash水影效果字
·全Flash动画网站实现的基础教学
·超酷flash光晕移动效果
·flash春雷闪电效果
·Flex 3 AdvancedDataGrid的使用(第二
·Flash制作大雪纷飞效果动画
·即拷即用的loading代码
关于我们 - 免责声明 - 网站地图 - 商务服务 - 联系我们 - RSS地图
©CopyRight 2006-2008, 5UFlash.COM, Inc. All Rights Reserved
鲁ICP备06034971号