我看了又看,找不到答案。
我有一个TreeView
. 它具有拖放功能以允许在树中移动节点。
我想将拖放限制为仅在该一个控件中,在应用程序的单个实例中工作(应用程序本身可以运行多个实例)。
我尝试了以下方法:
private void SubFolderTreeView_DragEnter(object sender, DragEventArgs e)
{
TreeView source = sender as TreeView; // also tried = (TreeView) sender;
if (source == this.SubFolderTreeView && e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
e.Effect = DragDropEffects.Move; // Okay, set the visual effect
else
e.Effect = DragDropEffects.None; // Unknown data, ignore it
}
不幸的是,同一应用程序的第二个实例仍然能够从其拖动TreeView
到第一个 TreeView:(source == this.SubFolderTreeView)
是
我没有测试一个完全不同的树视图是否可以拖到我的,虽然我对此表示怀疑,但上述行为已经失败了。
我尝试了其他一些方法 - 比较表单或控件的句柄也不起作用
bool isSameForm = ((MyForm) source.TopLevelControl == this); // still true
bool isSameHandle = (((Control)source).Handle == ((Control)this.SubFolderTreeView).Handle); // still true
我唯一能想到的其他事情是存储在 TreeView 或 Form 中的随机数(可能不起作用),并检查控件的绝对屏幕位置(不是最好的方法)。
我当然可以在应用程序中粘贴一个互斥锁,因此只允许一个实例运行,但我宁愿不这样做。
任何人都可以建议这样做的好方法吗?