我已經在C++/CLI中編寫了一個自定義控件(Forms.Control的直接子代),它將其大部分處理和所有繪畫工作卸載到單獨的legacy-ish MFC控件中。我將這個控件包裝在一個C#應用程序中。我需要能夠從應用程序中的同一窗體上的UserControl中將項目拖到C++/CLI控件上。爲什麼我的自定義控件沒有收到拖放事件?
由於某些原因,儘管我將AllowDrop設置爲true,但我的自定義控件仍未收到任何拖放事件。 (我已經驗證AllowDrop在運行時是真的。)我從來沒有機會檢查/操作DragEventArgs,因爲回調從未被調用過。
我已驗證拖放功能是否正常。例如,如果我使用面板替換自定義控件,我會得到dragdrop回調。
是否還有一些額外的東西必須在控件中實現才能支持拖動回調?是否有必要處理一些微妙的事情,讓系統認識到控制器正在被盤旋並應該成爲拖動操作的目標?
注:
的MFC控制,將做畫還沒有提供給我,所以我只是畫我想要畫一個簡單的漸變背景(通過OnPaintBackground
)。我還在OnPaint
上繪製了一個較小的漸變矩形。
我已經嘗試在創建自定義控件的句柄(通過設計器/構造函數代碼)和創建句柄(通過OnHandleCreated覆蓋)之前設置AllowDrop = true。行爲沒有差異。
拖動光標永遠不會從自定義控件上的默認「無可用拖動」光標更改。
我從UserControl的子控件上的MouseDown
事件的事件處理函數調用this.DoDragDrop()
。
DragDrop似乎可以與我在C#中創建的另一個自定義控件在與用戶控件相同的程序集中正常工作。它捕捉回調就好了。只有我的C++/CLI控件沒有看到它們。 initializecomponent goo是無關緊要的。我可以評論這一切,沒有任何改變。