2012-03-02 78 views
0

我有一個帶有撤消/重做的TextArea,它通過ctrl + z,ctrl + y執行。我的應用程序是一個在軟鍵盤上沒有cntrl的移動應用程序,所以我想製作一個撤消按鈕和一個模擬按鍵的重做按鈕。你如何模擬Flex中的鍵?Flex - 用於模擬按鍵的按鈕

回答

1

你可以派遣你喜歡,包括KeyboardEvents使派遣模擬CTRL-Z(鍵碼26)和Ctrl-Y(鍵碼25),你可以做類似下面的KeyboardEvent任何事件:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600" creationComplete="creationCompleteHandler(event)"> 
    <mx:Script> 
     <![CDATA[ 
      import mx.events.FlexEvent; 

      protected function creationCompleteHandler(event:FlexEvent):void 
      { 
       this.addEventListener(KeyboardEvent.KEY_UP, keyHandler); 
      } 

      protected function clickHandler(event:MouseEvent):void 
      { 
       this.dispatchEvent(new KeyboardEvent(KeyboardEvent.KEY_UP, true, false, 26, 26, 0, true)); 
      } 

      protected function keyHandler(e:KeyboardEvent):void 
      { 
       trace(e.charCode, e.keyCode, e.ctrlKey); 
      } 

     ]]> 
    </mx:Script> 
    <mx:Button id="undoButton" label="undo" click="clickHandler(event)" /> 
</mx:Application> 

this.dispatchEvent(new KeyboardEvent(KeyboardEvent.KEY_UP, true, false, 26, 26, 0, true));這一行是關鍵(沒有雙關意圖),它表示調度一個KEY_UP事件,接下來的兩個參數是bubbles和cancelable,然後是26對於charCode和keyCode,對於keyLocation是0,對於ctrlKey最後是true(模擬它是關閉的)。

+0

我試過這個,當我點擊按鈕但文本沒有撤銷時,我得到了26 26的真實跟蹤。我確信我錯過了一些簡單的東西,因爲你的例子很清楚並且合理。任何想法可能是什麼? – RapsFan1981 2012-03-02 01:53:29

+0

這可能是偵聽KeyBoardEvents的組件低於發送事件的按鈕。在Flash和Flex事件中,可以使DisplayList冒泡,以便鏈上的任何組件可以聽到它們,或者可以明確地偵聽組件中的事件。 textarea是否撤銷/重做您建造的東西或是第三方的東西? – kreek 2012-03-02 02:14:46

+0

它實際上只是火花TextArea – RapsFan1981 2012-03-02 02:19:44