簡體   English   中英

如何處理 Spec 2 工具欄中的事件/檢測按住 SHIFT 鍵?

[英]How to handle the event / detect hold SHIFT key in Spec 2 toolbars?

我有一個工具欄( SpToolbarPresenter )作為實例 var toolbar ,我有一個#updatePresenter實現:

updatePresenter

    cmds isEmpty ifTrue: [ ^ self ].

    btnHandlers := cmds collect: [ :cmd | 
                          | btn |
                          btn := SpToolbarButtonPresenter new
                                     label: cmd name;
                                     action: [];
                                     help: cmd help.
                          toolbar addItem: btn.
                          (SpEventHandler for: btn) whenMouseDownDo: [ :ev | 
                              self onCmd: cmd name event: ev ] ]

我使用SpEventHandler而不是#action:因為我想在單擊工具欄按鈕時檢測按住 SHIFT 鍵。 但是,我仍然需要#action:因為沒有它我會收到一個奇怪的錯誤,例如“#cull: was sent to nil”。

此代碼適用於第二個工具欄的按鈕(我在工具欄上有兩個),但不適用於第一個,第一個工具欄的按鈕永遠不會獲得事件,因此永遠不會調用onCmd

那么,如何 1)在單擊工具欄按鈕時檢測按住 SHIFT 或 2)修復此代碼,以便所有按鈕都會收到此事件? 任何幫助都會很有用。

PS。 Windows 10,規格 2, Pharo-9.0.0+build.940.sha.deeec198ef752789431ee24667709a4a3ff87bda (64 Bit)

正如@RandomB 所說,還添加了一個shiftPressed測試:

updatePresenter

    commands do: [ :aCommand | 
        | button |
        button := self newToolbarButton
                   label: aCommand name;
                   action: [  ];
                   help: aCommand help.
        toolbar addItem: button.
        button eventHandler whenMouseDownDo: [ :event | 
            event shiftPressed ifTrue: [
                self onCmd: aCommand name event: event ] ] ]

此外,即使沒有直接相關,我也無法避免說:使用完整的變量/方法名稱:它會使您的代碼更具可讀性:)

修復可能是:

updatePresenter

    cmds do: [ :cmd | 
        | btn |
        btn := SpToolbarButtonPresenter new
                   label: cmd name;
                   action: [  ];
                   help: cmd help.
        toolbar addItem: btn.
        btn eventHandler whenMouseDownDo: [ :ev | 
            self onCmd: cmd name event: ev ] ]

經過測試 - 它有效。 這個想法是使用按鈕的eventHandler然后為它們創建新的處理程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM