2009-08-31 63 views

回答

0

如果要拖動複合小部件,則需要引用「拖動控制柄」,這是組合小部件中實現HasAllMouseHandlers的一個元素。最簡單(也是我腦海裏最乾淨)的方法是讓複合窗口小部件擴展界面HasDragHandle,要求複合窗口具有以下方法: Widget getDragHandle();界面並沒有明確地告訴你,但返回的窗口小部件必須是小部件實現HasAllMouseHandlers接口(或者你會得到一個運行時錯誤)。

(實施HasAllMouseHandlers非複合組件可以直接使用)

我reccomend使用標籤作爲拖動手柄(使用戶瞭解它不需要包含任何文本它可能只是風格它可以用於拖拽),而不是表單元素,因爲那樣你會以用戶最可能期望的方式重載它的行爲。我不太確定一個禁用的元素是如何作爲拖拽手柄工作的,很可能禁用元素會阻止任何鼠標列表工作,所以它不能用作拖拽手柄(儘管它還沒有嘗試過)。

+0

問題是*禁用*元素不接受鼠標事件。我知道如何讓DnD工作,否則。 – pvoosten

+1

然後答案可能是:不,您不能拖放禁用的元素。如果(顯然)移動被禁用的元素非常重要,你可以在表單元素之上創建一個絕對定位的透明元素,並將其用作「點擊捕捉器」(將其作爲複合包裝) –

+1

BTW:透明元素可能應該是元素以0.01不透明度確保它是可點擊的。 –

0

或者,試着將你的小部件放到一個FocusPanel中,它已經啓用了拖放功能。我用TextBox和一個按鈕完成了這個工作,它似乎工作正常。禁用FocusPanel內部的小部件也可以防止它被意外激活。