如何在C#中正确重命名树视图中的文件

时间:2013-11-25 15:43:10

标签: c# treeview renaming

在我的代码中,我可以通过点击它们来重命名treenodes,但是在重命名treenode之后,它不会重命名与之关联的文件。我知道我错过了什么。任何人都有任何想法,或者可以指出我正确的方向,非常感谢!

 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Windows.Forms;
 using System.IO;

  namespace VEC_Job_Wizard
 {
public partial class Home : Form
{
    public Home()
    {
        InitializeComponent();            
    }

    private void Home_Load(object sender, EventArgs e)
    {

        this.treeView1.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag);
        this.treeView2.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag);
        this.treeView1.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView_DragEnter);
        this.treeView2.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView_DragEnter);
        this.treeView1.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeView_DragDrop);
        this.treeView2.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeView_DragDrop);   
        ListDirectory(treeView1, Path1);
        ListDirectory(treeView2, Path2);
        treeView1.TopNode.Expand();
        treeView2.TopNode.Expand();
    }
    String Path1 = @"F:\";
    String Path2 = @"S:\";



    private static TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo)
    {
        var directoryNode = new TreeNode(directoryInfo.Name);
        foreach (var directory in directoryInfo.GetDirectories())
            directoryNode.Nodes.Add(CreateDirectoryNode(directory));

        foreach (var file in directoryInfo.GetFiles())
            directoryNode.Nodes.Add(new TreeNode(file.Name));
        return directoryNode;
    }

    public void ListDirectory(TreeView treeView, string path)
    {
        treeView.Nodes.Clear();
        var rootDirectoryInfo = new DirectoryInfo(path);

        treeView.Nodes.Add(CreateDirectoryNode(rootDirectoryInfo));
    }

    private void treeView_ItemDrag(object sender, ItemDragEventArgs e)
    {
        DoDragDrop(e.Item, DragDropEffects.Move);
    }

    private void treeView_DragDrop(object sender, DragEventArgs e)        
    {
        TreeNode NewNode;


        if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
        {
            Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
            TreeNode DestinationNode = ((TreeView)sender).GetNodeAt(pt);
            NewNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
            if (DestinationNode.TreeView != NewNode.TreeView)
            {
                DestinationNode.Nodes.Add((TreeNode)NewNode.Clone());
                DestinationNode.Expand();
                //Remove Original Node
                NewNode.Remove();


            }
        }
    }

    private void treeView_DragEnter(object sender, DragEventArgs e)      
    {
        e.Effect = DragDropEffects.Move;
    }

    private void treeView1_MouseDown(object sender, MouseEventArgs e)
    {
        mySelectedNode = treeView1.GetNodeAt(e.X, e.Y);
    }

    private void menuItem1_Click(object sender, System.EventArgs e)
    {
        if (mySelectedNode != null && mySelectedNode.Parent != null)
        {
            treeView1.SelectedNode = mySelectedNode;
            treeView1.LabelEdit = true;
            if (!mySelectedNode.IsEditing)
            {
                mySelectedNode.BeginEdit();
            }
        }
        else
        {
            MessageBox.Show("No tree node selected or selected node is a root node.\n" +
               "Editing of root nodes is not allowed.", "Invalid selection");
        }
    }

    private void treeView1_AfterLabelEdit(object sender,
     System.Windows.Forms.NodeLabelEditEventArgs e)
    {
        if (e.Label != null)
        {
            if (e.Label.Length > 0)
            {
                if (e.Label.IndexOfAny(new char[] { '@', '.', ',', '!' }) == -1)
                {
                    // Stop editing without canceling the label change.
                    e.Node.EndEdit(false);
                }
                else
                {
                    /* Cancel the label edit action, inform the user, and 
                       place the node in edit mode again. */
                    e.CancelEdit = true;
                    MessageBox.Show("Invalid tree node label.\n" +
                       "The invalid characters are: '@','.', ',', '!'",
                       "Node Label Edit");
                    e.Node.BeginEdit();
                }
            }
            else
            {
                /* Cancel the label edit action, inform the user, and 
                   place the node in edit mode again. */
                e.CancelEdit = true;
                MessageBox.Show("Invalid tree node label.\nThe label cannot be blank",
                   "Node Label Edit");
                e.Node.BeginEdit();
            }
        }
    }

    private void treeView2_MouseDown(object sender, MouseEventArgs e)
    {
        mySelectedNode = treeView2.GetNodeAt(e.X, e.Y);
    }

    private void menuItem2_Click(object sender, System.EventArgs e)
    {
        if (mySelectedNode != null && mySelectedNode.Parent != null)
        {
            treeView2.SelectedNode = mySelectedNode;
            treeView2.LabelEdit = true;
            if (!mySelectedNode.IsEditing)
            {
                mySelectedNode.BeginEdit();
            }
        }
        else
        {
            MessageBox.Show("No tree node selected or selected node is a root node.\n" +
               "Editing of root nodes is not allowed.", "Invalid selection");
        }
    }

    // Renames the file upon clicking again once the particular file has been highlighted
    public void treeView2_AfterLabelEdit(object sender,
     System.Windows.Forms.NodeLabelEditEventArgs e)
    {
        if (e.Label != null)
        {
            if (e.Label.Length > 0)
            {
                if (e.Label.IndexOfAny(new char[] { '@', '.', ',', '!' }) == -1)
                {
                    // Stop editing without canceling the label change.
                    e.Node.EndEdit(false);
                }
                else
                {
                    /* Cancel the label edit action, inform the user, and 
                       place the node in edit mode again. */
                    e.CancelEdit = true;
                    MessageBox.Show("Invalid tree node label.\n" +
                       "The invalid characters are: '@','.', ',', '!'",
                       "Node Label Edit");
                    e.Node.BeginEdit();

                }
            }
            else
            {
                /* Cancel the label edit action, inform the user, and 
                   place the node in edit mode again. */
                e.CancelEdit = true;
                MessageBox.Show("Invalid tree node label.\nThe label cannot be blank",
                   "Node Label Edit");
                e.Node.BeginEdit();
            }
        }
    }

    public TreeNode mySelectedNode { get; set; }


    // Opens the selected file upon double-clicking
    private void treeView2_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        String TreeNodeName = treeView2.SelectedNode.ToString().Replace("TreeNode: ",String.Empty);

        System.Diagnostics.Process.Start(Path2 + "\\" + TreeNodeName);
    }

    private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        String TreeNodeName = treeView1.SelectedNode.ToString().Replace("TreeNode: ", String.Empty);

        System.Diagnostics.Process.Start(Path1 + "\\" + TreeNodeName);
    }       
}

}

0 个答案:

没有答案