gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:55:22 25 4
gpt4 key购买 nike

我正在维护一个 Windows 应用程序,它在一个窗口中有多个表单(form1form2form3)。目前,我将其他 form2form3 视为黑盒。在 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
}

form2form3 之间是拖放关系,所以当我把一个节点从 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;

关于c# - 防止拖放到当前控件之外(TreeView 中的 TreeNodes),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9868436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com