1.方式一:通过继承Event类编写Flex4的自定义事件
下面我们来做一个例子,实现这样的功能:监控TextInput的输入,通过监控输入的内容,触发不同的自定义事件。
我们先来写这个自定义事件:
ActionScript类Test43Event.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package
demo
{
import
flash.events.Event;
public
class
Test43Event
extends
Event
{
public
static
var
Test43_Number:
String
=
"number"
;
public
static
var
Test43_Letter:
String
=
"letter"
;
public
static
var
Test43_Other:
String
=
"other"
;
public
function
Test43Event(type:
String
, bubbles:
Boolean
=
false
, cancelable:
Boolean
=
false
)
{
super
(type, bubbles, cancelable);
}
}
}
|
然后添加一个MXML应用程序test43.mxml调用这个自定义事件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<s:Application xmlns:fx=
"http://ns.adobe.com/mxml/2009"
xmlns:s=
"library://ns.adobe.com/flex/spark"
xmlns:mx=
"library://ns.adobe.com/flex/mx"
minWidth=
"955"
minHeight=
"600"
creationComplete=
"application1_creationCompleteHandler(event)"
>
<s:layout>
<s:BasicLayout/>
</s:layout>
<fx:Script>
<![CDATA[
import
mx.events.FlexEvent;
protected
function
textinput1_keyDownHandler(event:KeyboardEvent):
void
{
var
test43Event:Test43Event;
if
(event.keyCode>=
48
&& event.keyCode<=
57
)
//0-9
{
test43Event =
new
Test43Event(Test43Event.Test43_Number);
dispatchEvent(test43Event);
}
else
if
(event.keyCode>=
65
&& event.keyCode<=
90
)
//a-z A-Z
{
test43Event =
new
Test43Event(Test43Event.Test43_Letter);
dispatchEvent(test43Event);
}
else
{
test43Event =
new
Test43Event(Test43Event.Test43_Other);
dispatchEvent(test43Event);
}
}
private
function
func1(event:Event):
void
{
if
(event.type==Test43Event.Test43_Letter)
{
msg.text =
"当前输入的是字母"
;
}
else
if
(event.type==Test43Event.Test43_Number)
{
msg.text =
"当前输入的是数字"
;
}
else
if
(event.type==Test43Event.Test43_Other)
{
msg.text =
"当前输入的是其他字符"
;
}
}
protected
function
application1_creationCompleteHandler(event:FlexEvent):
void
{
this
.addEventListener(Test43Event.Test43_Letter,func1);
this
.addEventListener(Test43Event.Test43_Number,func1);
this
.addEventListener(Test43Event.Test43_Other,func1);
}
]]>
</fx:Script>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<s:TextInput id=
"text1"
x=
"140"
y=
"157"
keyDown=
"textinput1_keyDownHandler(event)"
/>
<s:Label id=
"msg"
x=
"140"
y=
"128"
/>
</s:Application>
|
2.方式二:直接使用dispatchEvent编写Flex4的自定义事件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<s:Application xmlns:fx=
"http://ns.adobe.com/mxml/2009"
xmlns:s=
"library://ns.adobe.com/flex/spark"
xmlns:mx=
"library://ns.adobe.com/flex/mx"
minWidth=
"955"
minHeight=
"600"
creationComplete=
"application1_creationCompleteHandler(event)"
>
<s:layout>
<s:BasicLayout/>
</s:layout>
<fx:Script>
<![CDATA[
import
mx.events.FlexEvent;
protected
function
application1_creationCompleteHandler(event:FlexEvent):
void
{
this
.addEventListener(
"Letter"
,func1);
this
.addEventListener(
"Other"
,func1);
}
private
function
func1(event:Event):
void
{
if
(event.type ==
"Letter"
)
{
msg.text =
"当前选择的是字母"
;
}
else
{
msg.text =
"当前选择的不是字母"
;
}
}
protected
function
textinput1_keyDownHandler(event:KeyboardEvent):
void
{
if
(event.keyCode>=
65
&& event.keyCode<=
90
)
//a-z A-Z
{
dispatchEvent(
new
Event(
"Letter"
));
}
else
{
dispatchEvent(
new
Event(
"Other"
));
}
}
]]>
</fx:Script>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<s:TextInput x=
"180"
y=
"179"
keyDown=
"textinput1_keyDownHandler(event)"
/>
<s:Label x=
"179"
y=
"143"
id=
"msg"
/>
</s:Application>
|
参考资料:
Flex中事件的初探 http://www.blogjava.net/rainwindboys/archive/2008/08/07/220687.html
Flex各个keycode值对照 http://fengxiangpiao.javaeye.com/blog/802121
转载自:http://www.cnblogs.com/modou/articles/1901038.html