SftTree/DLL 7.5 - Tree Control
SftBox/OCX 5.0 - Combo Box Control
SftButton/OCX 3.0 - Button Control
SftMask/OCX 7.0 - Masked Edit Control
SftTabs/OCX 6.5 - Tab Control (VB6 only)
SftTree/OCX 7.5 - Tree Control
SftPrintPreview/DLL 2.0 - Print Preview Control (discontinued)
SftTree/DLL 7.5 - Tree Control
SftBox/OCX 5.0 - Combo Box Control
SftButton/OCX 3.0 - Button Control
SftDirectory 3.5 - File/Folder Control (discontinued)
SftMask/OCX 7.0 - Masked Edit Control
SftOptions 1.0 - Registry/INI Control (discontinued)
SftPrintPreview/OCX 1.0 - Print Preview Control (discontinued)
SftTabs/OCX 6.5 - Tab Control (VB6 only)
SftTree/OCX 7.5 - Tree Control
SftTabs/NET 6.0 - Tab Control (discontinued)
SftTree/NET 2.0 - Tree Control
This sample demonstrates copying/moving items within the same and between two tree controls using drag & drop.
The source code is located at C:\Program Files (x86)\Softelvdm\SftTree NET 2.0\Samples\CSharp\DragDrop.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Diagnostics;
using System.Reflection;
using Softelvdm.SftTreeNET;
using Softelvdm.Controls;
namespace DragDrop
{
public partial class Form1 : Form
{
// This example implements dragging (moving, copying) items between two tree controls.
public Form1()
{
InitializeComponent();
}
private void CloseButton_Click(object sender, EventArgs e) {
Close();
}
private void Form1_Load(object sender, EventArgs e) {
sftTree1.Initializing = true;
sftTree1.AllowDrop = true;
sftTree1.AutoExpandDragDrop = true;
sftTree1.Columns.Count = 2;
sftTree1.Headers[0, 0].Text = "Left Tree Control";
for (int c = 1; c < sftTree1.Columns.Count; ++c) {
sftTree1.Headers[0, c].Text = "Column " + c.ToString();
}
for (int i = 0; i < 100; ++i) {
ItemClass itemParent = sftTree1.ItemCollection.Add(new string[] { "Item " + i.ToString(), "Cell 1 in Item " + i.ToString(), "Cell 2 in Item " + i.ToString() } );
itemParent.RowHeader.Text = i.ToString();
++i;
ItemClass item = itemParent.Add(new string[] { "Item " + i.ToString(), "Cell 1 in Item " + i.ToString(), "Cell 2 in Item " + i.ToString() });
item.RowHeader.Text = i.ToString();
++i;
ItemClass subitem = item.Add(new string[] { "Item " + i.ToString(), "Cell 1 in Item " + i.ToString(), "Cell 2 in Item " + i.ToString() });
subitem.RowHeader.Text = i.ToString();
++i;
ItemClass child = subitem.Add(new string[] { "Item " + i.ToString(), "Cell 1 in Item " + i.ToString(), "Cell 2 in Item " + i.ToString() });
child.RowHeader.Text = i.ToString();
++i;
child = item.Add(new string[] { "Item " + i.ToString(), "Cell 1 in Item " + i.ToString(), "Cell 2 in Item " + i.ToString() });
child.RowHeader.Text = i.ToString();
}
sftTree1.Columns.MakeOptimal(0, false);
sftTree1.RowHeaders.MakeOptimal(0, false);
sftTree1.RecalcHorizontalExtent();
sftTree1.Initializing = false;
sftTree2.Initializing = true;
sftTree2.AllowDrop = true;
sftTree2.AutoExpandDragDrop = true;
sftTree2.Columns.Count = 3;
sftTree2.RowHeaders.Width = 0;
sftTree2.Headers[0, 0].Text = "Right Tree Control";
for (int c = 1; c < sftTree2.Columns.Count; ++c) {
sftTree2.Headers[0, c].Text = "Column " + c.ToString();
}
for (int i = 0; i < 100; ++i) {
ItemClass itemParent = sftTree2.ItemCollection.Add(new string[] { "Item " + i.ToString(), "Cell 1 in Item " + i.ToString(), "Cell 2 in Item " + i.ToString() });
itemParent.RowHeader.Text = i.ToString();
++i;
ItemClass item = itemParent.Add(new string[] { "Item " + i.ToString(), "Cell 1 in Item " + i.ToString(), "Cell 2 in Item " + i.ToString() });
item.RowHeader.Text = i.ToString();
++i;
ItemClass subitem = item.Add(new string[] { "Item " + i.ToString(), "Cell 1 in Item " + i.ToString(), "Cell 2 in Item " + i.ToString() });
subitem.RowHeader.Text = i.ToString();
++i;
ItemClass child = subitem.Add(new string[] { "Item " + i.ToString(), "Cell 1 in Item " + i.ToString(), "Cell 2 in Item " + i.ToString() });
child.RowHeader.Text = i.ToString();
++i;
child = item.Add(new string[] { "Item " + i.ToString(), "Cell 1 in Item " + i.ToString(), "Cell 2 in Item " + i.ToString() });
child.RowHeader.Text = i.ToString();
}
sftTree2.Columns.MakeOptimal(0, false);
sftTree2.RecalcHorizontalExtent();
sftTree2.Initializing = false;
}
private void sftTree1_DragDetected(object sender, DragDetectedEventArgs e) {
Debug.Write("sftTree1_DragDetected ");
DumpValues(e);
// get the current item
if (e.Item == null) return;
ItemClass item = e.Item;
// don't drag headers, footers
if (item.UsageLocation != UsageLocationEnum.items)
return;
// start dragging the item
sftTree1.DoDragDrop(e.Item, DragDropEffects.Copy|DragDropEffects.Move);
}
private void sftTree1_DragOver(object sender, DragEventArgs e) {
Debug.WriteLine("sftTree1_DragOver ");
e.Effect = DragDropEffects.None;
if (sftTree1.DropTarget != null && e.Data.GetDataPresent(typeof(ItemClass))) {
// Copy or move based on control key
if ((Control.ModifierKeys & Keys.Control) != 0)
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.Move;
}
}
private void sftTree1_DragDrop(object sender, DragEventArgs e) {
Debug.Write("sftTree1_DragDrop ");
DumpValues(e);
if (sftTree1.DropTarget != null && e.Data.GetDataPresent(typeof(ItemClass))) {
ItemClass originalItem = (ItemClass)e.Data.GetData(typeof(ItemClass));
ItemClass targetItem = (ItemClass)sftTree1.DropTarget;
ItemClass newItem = null;
if (e.Effect == DragDropEffects.Move) {
try {
newItem = originalItem.Move(targetItem, MoveStyleEnum.TargetAsParentInsertFirst);
} catch (Exception exc) {
MessageBox.Show(exc.Message);
}
} else {
try {
newItem = originalItem.Copy(targetItem, CopyStyleEnum.TargetAsParentInsertFirst, true);
} catch (Exception exc) {
MessageBox.Show(exc.Message);
}
}
if (newItem != null) {
sftTree1.Columns.MakeOptimal(0, false);
newItem.ScrollIntoView();
}
}
}
private void sftTree2_DragDetected(object sender, DragDetectedEventArgs e) {
Debug.Write("sftTree2_DragDetected ");
DumpValues(e);
// get the current item
if (e.Item == null) return;
ItemClass item = e.Item;
// don't drag headers, footers
if (item.UsageLocation != UsageLocationEnum.items)
return;
// start dragging the item
sftTree2.DoDragDrop(e.Item, DragDropEffects.Copy | DragDropEffects.Move);
}
private void sftTree2_DragOver(object sender, DragEventArgs e) {
Debug.WriteLine("sftTree2_DragOver ");
e.Effect = DragDropEffects.None;
if (sftTree2.DropTarget != null && e.Data.GetDataPresent(typeof(ItemClass))) {
// Copy or move based on control key
if ((Control.ModifierKeys & Keys.Control) != 0)
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.Move;
}
}
private void sftTree2_DragDrop(object sender, DragEventArgs e) {
Debug.Write("sftTree2_DragDrop ");
DumpValues(e);
if (sftTree2.DropTarget != null && e.Data.GetDataPresent(typeof(ItemClass))) {
ItemClass originalItem = (ItemClass)e.Data.GetData(typeof(ItemClass));
ItemClass targetItem = (ItemClass)sftTree2.DropTarget;
ItemClass newItem = null;
if (e.Effect == DragDropEffects.Move) {
try {
newItem = originalItem.Move(targetItem, MoveStyleEnum.TargetAsParentInsertFirst);
} catch (Exception exc) {
MessageBox.Show(exc.Message);
}
} else {
try {
newItem = originalItem.Copy(targetItem, CopyStyleEnum.TargetAsParentInsertFirst, true);
} catch (Exception exc) {
MessageBox.Show(exc.Message);
}
}
if (newItem != null) {
sftTree2.Columns.MakeOptimal(0, false);
newItem.ScrollIntoView();
}
}
}
// This is a small helper routine to show all properties and fields of an object
private void DumpValues(object o) {
PropertyInfo[] api = o.GetType().GetProperties();
foreach (PropertyInfo pi in api)
Debug.Write(" " + pi.Name + " " + pi.GetValue(o, new object[] ));
FieldInfo[] afi = o.GetType().GetFields();
foreach (FieldInfo fi in afi)
Debug.Write(" " + fi.Name + " " + fi.GetValue(o));
Debug.WriteLine("");
}
}
}