/// <summary> /// 用键盘上下左右键和ctrl键移动节点 /// 思路:现复制2个选中的节点。1.为了记住第一次选中节点位置,2在上移过程中现将令一个插入指定位置, /// 然后将选中节点移除 /// </summary> /// <param name="treeView">treeview</param> /// <param name="e">键盘的按键</param> private void MoveTreeNodeByKeyWord(TreeView treeView, KeyEventArgs e) { if (treeView.SelectedNode != null) { if (e.Control != true) return; TreeNode tn = treeView.SelectedNode; TreeNode tempNode = (TreeNode)treeView.SelectedNode.Clone(); switch (e.KeyCode) { case Keys.Up: if (treeView.SelectedNode.PrevNode == null) return; if (tn.Parent == null) treeView.Nodes.Insert(tn.Index + 2, tempNode); else tn.Parent.Nodes.Insert(tn.Index + 2, tempNode); treeView.SelectedNode.Remove(); treeView.SelectedNode = tempNode; break; case Keys.Down: if (treeView.SelectedNode.NextNode == null) return; if (tn.Parent == null) treeView.Nodes.Insert(tn.Index + 2, tempNode); else tn.Parent.Nodes.Insert(tn.Index + 2, tempNode); treeView.SelectedNode.Remove(); treeView.SelectedNode = tempNode; break; case Keys.Left: if (treeView.SelectedNode.Parent == null) return; if (treeView.SelectedNode.Parent.Parent == null) treeView.Nodes.Add(tempNode); else tn.Parent.Parent.Nodes.Add(tempNode); tn.Remove(); treeView.SelectedNode = tempNode; break; case Keys.Right: if (treeView.SelectedNode.NextNode == null) return; treeView.SelectedNode.NextNode.Nodes.Insert(0, tempNode); tn.Remove(); treeView.SelectedNode = tempNode; break; } } }