拖放窗口窗体

本文关键字:窗体 窗口 拖放 | 更新日期: 2023-09-27 18:19:58

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();
}

上面的代码是我到目前为止用于拖放操作的代码。在第三种(拖放(方法之前,它可以正常工作。基本上,我试图实现的是将一个项目拖到名称之间。我可以获取使用"日历"拖动项目的索引。SelectedRowIndex',但问题是获取目标的索引或我想将其拖到的位置。允许我拖动项目,但是当我松开鼠标中的左键时,它会回到它的来源。日历是开源的,我从代码项目中找到了它,我正在使用和修改它以将其添加到现有的桌面应用程序中。

无论如何,我可以使用某个事件在释放鼠标中的左键后立即获取鼠标的位置?

拖放窗口窗体

我认为

,除了拖放操作之外,您还需要跟踪鼠标移动(或鼠标输入(,要获取一个元素的索引,拖放本身将无济于事(它得到第一点(,只需通过鼠标移动跟踪和识别目标。

或者简单地,为要由拖放作为目标的对象(控件(添加鼠标输入事件,通过鼠标输入选择目标位置,并通过拖放完成演讲,最好在拖放操作完成后删除鼠标输入事件,然后再次通过拖放输入添加它。

希望我把你的问题弄真了

我很确定在桌面应用程序中,您可以获取鼠标位置,而不必依赖传递的mouseevent参数。

控件.鼠标位置 - http://msdn.microsoft.com/en-us/library/system.windows.forms.control.mouseposition.aspx

您应该能够通过"control".mouseposition获取"点"值,其中控件可能是您正在使用的窗体。

编辑

如参考中所述,control.mouseposition 方法与 this.cursor.position 相同。

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

此外,您将需要找到控件(复数(,这些控件位于(或具有包含(您捕获的光标位置点的 ClientRectangle 边界。

控制。GetChildAtPoint(Point(..您可能必须递归地执行此操作。

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