2013-02-11 157 views
0

我正在開發一個業餘愛好項目來加強我的應用程序開發技能。有一件事給我帶來一些麻煩。將元素拖放到新區域

我的項目是一個字符發生器D & D.在一個部分我產生屬性分數。我有一個打開'生成'面板的按鈕。生成面板有6個屬性區域,當它們滿足一些要求時(從列表中選擇一個生成方法並單擊按鈕),這些屬性區域將被編程填充。

每種生成方法只允許用戶將六個分數分配給他們的六個屬性。

我可以很容易地將這些可點擊的按鈕打開一個對話框(或模態,或類似的)來選擇分配選定分數的位置,但這不會教我任何新東西。

我想要做的是讓用戶將屬性分數(當前是面板中的文本框)拖放到他們想要分配給它的屬性上(當前每個屬性都是由一個文本框,一個標籤和另一個文本框,我希望用戶能夠將這個值放入這三個區域中的任何一個)。

我還想允許用戶拖放屬性分數之間的值,但這應該很容易地從第一部分的答案開始。

總之,我該如何讓用戶可以將控件的值拖到應用程序中的另一個控件

回答

0

經過大量的搜索後,我發現了this article,它描述了在.NET webforms中拖放的基本要素。

下面複製是要領:

在MouseDown事件中要拖拽,關火「的DoDragDrop」事件,傳遞你要刪除的數據是什麼和什麼你DragDropEffects值想要實現。

在可以接受拖動&滴對象,運行這樣的代碼的MouseEnter事件:

if ((e.AllowedEffect & DragDropEffects.Link) != 0 

    && e.Data.GetDataPresent(typeof(string))) 

    e.Effect = DragDropEffects.Link; 

e.AllowedEffect是按位,並且可以匹配針對多個影響。

設置e.Effect表示控件可以接受丟棄的數據。您設置爲'.Effect'的效果決定了鼠標的外觀。

最後,在'DragDrop'事件的任何控制接受丟棄的數據,您可以通過使用'e.Data.GetData'訪問移動的數據 - 這將返回一個castable對象。

這並不能解決我的一些問題(值得注意的是,鼠標不會帶有數據的「陰影」),但這是一個很好的第一步。