/// <summary> /// /// </summary> /// <param name="e"></param> protected override void OnItemDrag(ItemDragEventArgs e) { _selectedNode = (TreeNode) e.Item; // Call dragstart event if (DragStart != null) { DragItemEventArgs ea = new DragItemEventArgs(); ea.Node = _selectedNode; DragStart(this, ea); } // Change any previous node back if (_previousNode != null) { _previousNode.BackColor = BackColor; _previousNode.ForeColor = ForeColor; } // Move the form with the icon/label on it // A better width measurement algo for the form is needed here int width = Width = _selectedNode.Text.Length*(int) _formDrag.labelText.Font.Size; if (_selectedNode.Text.Length < 5) width += 20; _formDrag.Size = new Size(width, _formDrag.Height); _formDrag.labelText.Size = new Size(width, _formDrag.labelText.Size.Height); _formDrag.labelText.Text = _selectedNode.Text; // Start drag drop DoDragDrop(e.Item, _dragMode); }
/// <summary> /// /// </summary> /// <param name="e"></param> protected override void OnKeyUp(KeyEventArgs e) { if (e.KeyCode == Keys.Escape) { if (_selectedNode != null) { SelectedNode = _selectedNode; } if (_previousNode != null) { _previousNode.BackColor = BackColor; _previousNode.ForeColor = ForeColor; } Cursor = Cursors.Default; _formDrag.Visible = false; // Call cancel event if (DragCancel != null) { DragItemEventArgs ea = new DragItemEventArgs(); ea.Node = _selectedNode; DragCancel(this, ea); } } }
/// <summary> /// /// </summary> /// <param name="e"></param> protected override void OnDragLeave(EventArgs e) { if (_selectedNode != null) { SelectedNode = _selectedNode; } if (_previousNode != null) { _previousNode.BackColor = _dragOverNodeBackColor; _previousNode.ForeColor = _dragOverNodeForeColor; } _formDrag.Visible = false; Cursor = Cursors.Default; // Call cancel event if (DragCancel != null) { DragItemEventArgs ea = new DragItemEventArgs(); ea.Node = _selectedNode; DragCancel(this, ea); } }