我在一个表单中有2个Treeview,如下所示。
left_treeview_node1 | right_treeview_node1
left_treeview_node2 | right_treeview_node2
left_treeview_node3 | right_treeview_node3
left_treeview_node4 | right_treeview_node4
这里我们可以将左侧的treenode拖放到右侧进行映射。
现在用户已经打开了2个相同表单的实例,他正在从第一个实例拖动left_treeview_node1
并将其放到同一表单的另一个实例的right_treeview_node4
。
所以如何区分另一个实例并停止支持从一个实例拖放到另一个实例。
同一表单的每个实例都有不同的GUID吗?
我们可以使用Mutex来区分相同形式的2个实例吗?
提前致谢...
答案 0 :(得分:1)
我假设您将TreeNode作为要拖动的对象传递:
private void treeView1_ItemDrag(object sender, ItemDragEventArgs e) {
treeView1.DoDragDrop(e.Item, DragDropEffects.Move);
}
然后,您希望在第二个TreeView上编写DragEnter事件处理程序,以验证您确实获得了TreeNode,并且它来自您期望的TreeView:
private void treeView2_DragEnter(object sender, DragEventArgs e) {
if (!e.Data.GetDataPresent(typeof(TreeNode))) return;
var node = (TreeNode)e.Data.GetData(typeof(TreeNode));
if (node.TreeView == this.treeView1) {
e.Effect = DragDropEffects.Move;
}
}
对象标识检查与来自其他表单的节点不匹配。如果你想检查它是否来自预期的表单而不是预期的TreeView(这里似乎不太可能),那么将测试编写为if (node.TreeView.FindForm() == this)
。
答案 1 :(得分:0)
使用Control.Handle属性,该属性唯一标识您案例中的控件或表单。
答案 2 :(得分:0)
比较a = NULL
返回的值 - 如果拖动和目标项目不同,则不允许丢弃。
答案 3 :(得分:0)
您还可以在拖动事件中测试以查看表单是否已聚焦。如果不是那么你知道其余的。或者,如果您确实要确定,请在窗体失去/获得焦点时禁用/启用控件上的拖放。
答案 4 :(得分:0)
这里我使用了控件的HASHCODE来确定控件的不同实例,如下所示,并且它有效。
在tvw1.DragDrop事件中
defaultConfig {
minSdkVersion 9
targetSdkVersion 24
}
productFlavors {
baz {
applicationId 'com.myapp.baz'
versionCode 1
versionName '1.0.0'
}
foo {
applicationId 'com.myapp.foo'
versionCode 518
versionName '4.3.2'
}
}