private void programTree_KeyDown(object sender, KeyEventArgs e) { if (this.programTree.SelectedNode == null) { return; } if (e.Control && e.KeyCode == Keys.C) { var node = this.programTree.SelectedNode.Tag as NodeParam; Type type = node.GetType(); if (type == typeof(PCSParam) || type == typeof(ReadCodeParam) || type == typeof(BadmarkParam) || type == typeof(PasteParam)) { nodeParamCopy = (this.programTree.SelectedNode.Tag as NodeParam).Clone() as NodeParam; Debug.WriteLine("复制"); } else { nodeParamCopy = null; } } else if (e.Control && e.KeyCode == Keys.V) // 拷贝 { var parent = this.programTree.SelectedNode.Tag as NodeParam; if (parent == null || nodeParamCopy == null) { return; } Type type = parent.GetType(); Type type2 = nodeParamCopy.GetType(); if (type2 == typeof(PCSParam) && type == typeof(PCBParam)) { this.Flow.PCB.Nodes.Add(nodeParamCopy.Clone() as PCSParam); this.RefreshTree(); } else if (type2 == typeof(PasteParam) && type == typeof(PasteListNode)) { parent.Nodes.Add(nodeParamCopy.Clone() as PasteParam); this.RefreshTree(); } else if (type2 == typeof(BadmarkParam) && type == typeof(BadmarkListNode)) { parent.Nodes.Add(nodeParamCopy.Clone() as BadmarkParam); this.RefreshTree(); } else if (type2 == typeof(MarkParam) && type == typeof(ReadCodeListNode)) { parent.Nodes.Add(nodeParamCopy.Clone() as MarkParam); this.RefreshTree(); } } }