c# – 防止拖放到当前控件之外(TreeView中的TreeNodes)

我正在维护一个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;
上一篇:在wxPython中使用三态复选框的分层检查树控件?


下一篇:c# – 创建自定义TreeView / TreeNode