Hi,
I'm using ItemDrag event to drag&drop items from a RadTreeView to another control.
When a drag an item from the RadTreeView, the ItemDrag event is raised multiple times (While item moving) and the item is dropped multiple times on the control.
The same code with System.Windows.Forms works fine.
Is there a solution to achieve the same result as System.Windows.Forms ?
Here is my code of a test project which compares Telerik et System.Windows.Forms:
#region Telerik Drag&Drop
private void radTreeView1_ItemDrag(object sender, Telerik.WinControls.UI.RadTreeViewEventArgs e)
{
System.Diagnostics.Debug.WriteLine(String.Format("radTreeView1_ItemDrag : {0}", e.Node.Name));
DoDragDrop(e.Node, DragDropEffects.Move);
}
private void radTreeView2_DragEnter(object sender, DragEventArgs e)
{
System.Diagnostics.Debug.WriteLine(String.Format("radTreeView2_DragEnter : {0}", e.Effect));
if (e.Data.GetDataPresent("Telerik.WinControls.UI.RadTreeNode", true) == true)
{
e.Effect = DragDropEffects.Move;
}
}
private void radTreeView2_DragDrop(object sender, DragEventArgs e)
{
RadTreeNode node = e.Data.GetData(typeof(RadTreeNode)) as RadTreeNode;
if (node != null)
{
if (e.Effect == DragDropEffects.Move)
{
System.Diagnostics.Debug.WriteLine(String.Format("radTreeView2_DragDrop : {0}", e.Effect));
this.radTreeView2.Nodes.Add((node.Clone() as RadTreeNode));
}
}
}
#endregion Telerik Drag&Drop
#region System.Windows.Forms Drag&Drop
private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
{
System.Diagnostics.Debug.WriteLine(String.Format("treeView1_ItemDrag : {0}", (e.Item as TreeNode).Text));
DoDragDrop(e.Item, DragDropEffects.Move);
}
private void treeView2_DragEnter(object sender, DragEventArgs e)
{
System.Diagnostics.Debug.WriteLine(String.Format("treeView2_DragEnter : {0}", e.Effect));
if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode", true) == true)
{
e.Effect = DragDropEffects.Move;
}
}
private void treeView2_DragDrop(object sender, DragEventArgs e)
{
TreeNode node = e.Data.GetData(typeof(TreeNode)) as TreeNode;
if (node != null)
{
if (e.Effect == DragDropEffects.Move)
{
System.Diagnostics.Debug.WriteLine(String.Format("treeView2_DragDrop : {0}", e.Effect));
this.treeView2.Nodes.Add((node.Clone()) as TreeNode);
}
}
}
private void bindingSource1_BindingComplete(object sender, BindingCompleteEventArgs e)
{
}
private void bindingSource1_ListChanged(object sender, System.ComponentModel.ListChangedEventArgs e)
{
this.treeView1.Nodes.Clear();
for (int i = 0; i < this.bindingSource1.Count; i++)
{
TreeNode node = new TreeNode((this.bindingSource1[0] as DataRowView).Row["C1"].ToString());
this.treeView1.Nodes.Add(node);
}
}
#endregion System.Windows.Forms Drag&Drop