2013-06-25 123 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