简单的按键管理类,使ctrl+enter快捷键起作用

经过测试,ctrl键和enter键组合的话,在flash player里是没有效果的,按下了 ctrl时,再按enter键,就监听不到enter键的按下。但是用IE打开可以(测试时用的IE8).

写了个简单的按键管理类:

private var isctrlDown:Boolean = false;
	//--------------------------------------------------------------------------
	//		Public Methods
	//--------------------------------------------------------------------------
	
	//--------------------------------------------------------------------------
	//		Event Handler
	//--------------------------------------------------------------------------
	private function onKeyUpHandler(event:KeyboardEvent):void
	{
		if(event.keyCode == Keyboard.CONTROL)
		{
			isctrlDown = false;
//			trace("控制键弹起");
		}
	}
	private function onKeyDownHandler(event:KeyboardEvent):void
	{
		if(event.keyCode == Keyboard.CONTROL)
		{
			isctrlDown = true;
//			trace("控制键按下");
			return;
		}
//		trace(event.keyCode)
		if(event.keyCode == 13)
		{
//			trace("ENTER按下");
			if(isctrlDown == true)
			{
//				trace("ENTER按下并且ctrl按下");
                                isctrlDown = false;
				dispatchEvent(new PrivateChatEvent(PrivateChatEvent.CTRL_ENTER_SEND_MSG));
			}
		}
	}
	//--------------------------------------------------------------------------
	//		Protected
	//--------------------------------------------------------------------------
	
	//--------------------------------------------------------------------------
	//		Privates
	//--------------------------------------------------------------------------
	private function init():void
	{
		listenKeyBoardEvent();
	}
	
	private function listenKeyBoardEvent():void
	{
		Application.application.stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDownHandler);
		Application.application.stage.addEventListener(KeyboardEvent.KEY_UP,onKeyUpHandler);
	}
	//--------------------------------------------------------------------------
	//		Dispose
	//--------------------------------------------------------------------------
	public function destroy():void
	{
		Application.application.stage.removeEventListener(KeyboardEvent.KEY_DOWN,onKeyDownHandler);
		Application.application.stage.removeEventListener(KeyboardEvent.KEY_UP,onKeyUpHandler);
	}

FLex项目中若用TextArea做为聊天内容输入框,在用ctrl+enter键发送了聊天信息后的那一刹那,光标可能会向下换一行,并且输入框可能会随之出现文本残留,一个解决办法就是做个延时,TextArea.editable=false,让TextArea在延时到了才能再被输入文本,TextArea.editable = true ,延时长度为 50毫秒感觉还不错,在延时到了时先

让TextArea.text = "",可以解决文本发送出去后的残留问题。

posted @ 2011-02-18 13:57  居家懒人  阅读(1162)  评论(0编辑  收藏  举报