2011-02-25 53 views
1

我的應用程序有一個數據網格,以及許多其他的UIComponents(按鈕,菜單等)。我有一個普通的階段KeyDown處理程序以及特定的數據網格。我試圖實現的行爲變得比我想象的更復雜:基本上,當使用鍵盤箭頭時,我希望datagrid始終能夠聽到關於這樣的命令的信息,即使它沒有焦點。鍵盤操控++

可能的方法我認爲:

  • 有DG成爲市場關注焦點時刻:看來愚蠢/棘手 - 基本上需要記住與其餘任何互動之後讓焦點回到DG界面,這顯然不能縮放。

  • 嘗試從舞臺的KeyDown處理程序設置DG焦點:好像時間不工作,因爲DG獲得焦點來不及「聽」的事件。

  • 從舞臺的keydown的處理程序,檢查DG沒有焦點,如果是這樣傳遞的事件。這在理論上似乎是有道理的,但我不知道如何正確執行此操作,因爲我的階段keyDown處理程序使用捕獲,因此似乎一遍又一遍地捕獲同一事件。

我想知道是否有更簡單的東西,我只是缺乏經驗。很想聽聽你的想法。

謝謝!

˚F

回答

0

我會去的第三個選項,通過舞臺keydown事件到DataGrid ......但是,只有當事件的默認行爲還沒有被阻止。然後在DataGrid處理程序中簡單地使用event.preventDefault(),你應該很好。

例如:

stage.addEventListener(..., function(event:KeyboardEvent):void { 
    if (event.isDefaultPrevented()) 
     return; 
    dataGrid.dispatchEvent(event); 
}); 

dataGrid.addEventListener(..., function(event:KeyboardEvent):void { 
    event.preventDefault(); 
    ... handle event ... 
}); 
+0

大衛,感謝您的諮詢。它有一個小比這更復雜 - 舞臺的KeyDown處理程序仍然出現的DG處理程序之前,並因此preventDefault從未發生過整個事情StackOverflows ......但我也跟着從第二階段的處理程序,具有捕獲相同的路徑==假的,一切似乎都很好。順便說一句,你碰巧知道爲什麼SystemManager的keyDownHandler抓住箭頭鍵(除其他事項外)並重新分派他們 - 我的KeyDown處理程序被擊中兩次,我不知道是否有任何充分的理由是。 – 2011-02-25 23:05:37

+0

對不起,我不知道。但是,如果你問一個新問題,請發佈一個鏈接 - 我有興趣找出答案。 – 2011-02-26 05:06:39

+0

是否調度了兩次keyboardEvent?或者只有一次,但被捕獲兩次?也許你可以看看你正在轉發...你應該設置'bubbles'屬性設置爲false事件的'bubble'財產,否則就分派給所有頂級事件監聽器......你不希望我想在這種情況下...... – CGBe 2012-05-29 15:40:38