我正在维护一个Windows应用程序,它在一个窗口中有多个表单(form1,form2,form3).我现在将另一个form2和form3视为黑盒子.在form1中我有一个TreeView,我正在TreeView中实现拖放功能.
如何防止form1控件之外的掉线?
我正在实现3个事件处理程序:
private void treeView_ItemDrag (...)
{
DoDragDrop(e.Item, DragDropEffects.Move);
}
private void treeView_DragEvent (...)
{
e.Effect = DragDropEffects.Move;
}
private void treeView_DragDrop (...)
{
//the node move logic here
}
form2和form3之间有一个拖放关系,所以当我将一个节点从form1拖到form3默认情况下它允许移动(坏).我希望能够从form1控制代码中阻止这种情况.
如何防止form1控件之外的掉线?我查看了_DragLeave事件,但我不确定如何在没有DragEventArgs的情况下控制操作.
解决方法:
Cursor对象中有一个小知道属性,可以将鼠标移动仅限制到某个矩形.
这是Form1的全局变量
Rectangle _originalClip;
这将在你的Form1_Load事件中
_originalClip = Cursor.Clip;
这可能在您的treeView.ItemDrag中,强制将光标放在form1客户区域内
Cursor.Clip = form1.RectangleToScreen(form1.ClientRectangle);
现在您需要恢复原始剪辑区域. treeView.DragDrop中有一个好地方.但为了安全起见,也要放在Form1_Closing事件中
Cursor.Clip = _originalClip;