2013-06-25 124 views
0
private void calendarPlanner1_ItemClick(object sender, WeekPlannerItemEventArgs e) 
{ 
    DoDragDrop(calendarPlanner1.SelectedItem, DragDropEffects.Move); 
} 

private void calendarPlanner1_DragEnter(object sender, DragEventArgs e) 
{ 
    e.Effect = DragDropEffects.Move; 
} 

private void calendarPlanner1_DragDrop(object sender, DragEventArgs e) 
{ 
    SRRepair repairDrag = new SRRepair(); 
    var rows = calendarPlanner1.Rows; 
    var row = rows.ElementAt(calendarPlanner1.SelectedRowIndex); 
    row.Items.Add((WeekPlannerItem)e.Data.GetData(typeof(WeekPlannerItem))); 
    repairDrag = assignedRepairsList[assignedItemCollection.IndexOf(calendarPlanner1.SelectedItem)]; 
    repairDrag.AssignedToUser = engineerList[calendarPlanner1.SelectedRowIndex]; 
    repairDrag.Update(); 
} 

上面的代碼是我迄今爲止的拖放操作。它工作正常,直到第三個(拖放)方法。基本上我試圖實現的是在名稱之間拖動一個項目。我可以從使用'calendar.SelectedRowIndex'拖動項目的索引,但問題是獲取目標的索引或我想將其拖到的位置。允許我拖動項目,但是當我釋放鼠標左鍵時,它會返回它來自的位置。該日曆是一個開源的,我從代碼項目中找到它,我正在使用和修改它以將其添加到現有的桌面應用程序中。拖放Windows窗體

無論如何還是我可以使用鼠標左鍵釋放鼠標位置的事件?

回答

0

我認爲,除了拖放操作之外,您還需要跟蹤鼠標移動(或鼠標輸入),以便獲取一個元素的索引,拖放自己也無濟於事(它會得到非常第一點),通過鼠標移動來追蹤和識別目標。

或者簡單地說,爲您想要放置的對象(控件)添加鼠標輸入事件,通過鼠標輸入選擇目標位置,然後通過drop完成操作,最好在放下鼠標時刪除鼠標輸入事件操作完成,並通過再次添加進入。

希望我得到了你的問題真正

+0

我會試試這個。感謝:D – majik27

0

我在一個桌面應用程序相當肯定,你可以得到鼠標的位置,而不必依賴於傳遞的MouseEvent的參數。

control.mouseposition - http://msdn.microsoft.com/en-us/library/system.windows.forms.control.mouseposition.aspx

,你就應該能夠通過「control'.mouseposition獲得 '點' 值。那裏的控制可能是你正在使用的形式。

編輯

正如在參考所述,control.mouseposition方法等同於this.cursor.position。

cursor.position - http://msdn.microsoft.com/en-us/library/system.windows.forms.cursor.position.aspx

此外,你將要查找的控件(複數),它位於(或有包括ClientRectangle邊界)光標位置點你捕捉。 。

control.GetChildAtPoint(點) ..這可能需要遞歸做..

GetChildAtPoint - http://msdn.microsoft.com/en-us/library/ms158404.aspx