⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 projectbrowsereventhandler.cs

📁 c#精彩编程百例(源代码)
💻 CS
📖 第 1 页 / 共 2 页
字号:
			Debug.Assert(directory || File.Exists(filename), "ProjectBrowserEventHandler.MoveCopyFile : source file doesn't exist");

			// search "folder" in which the node contains
			while (node.ProjectNodeType != ProjectNodeType.Folder && 
				   node.ProjectNodeType != ProjectNodeType.Project) {
				node = (ProjectBrowserNode)node.Parent;
				if (node == null)
					return;
			}

			string name        = Path.GetFileName(filename); 
			string newfilename = node.FileName + "\\" + name;
			
			string oldrelativename = FileUtility.MakeRelative(filename, node.Project.WorkingDirectory);
			string newrelativename = FileUtility.MakeRelative(newfilename, node.Project.WorkingDirectory);
			
			ProjectBrowserNode oldparent = browser.GetPath(oldrelativename, node.Root, false); // TODO : change this for more projects
			ProjectBrowserNode newparent = browser.GetPath(newrelativename, node.Root, false);
			
			ProjectBrowserNode oldnode   = null; // if oldnode is == null the old file doesn't exist in current tree
			
			if (oldparent != null) {
				foreach (ProjectBrowserNode childnode in oldparent.Nodes) {
					if (childnode.Name == name) {
						oldnode = childnode;
						break;
					}
				}
			}
			
			if (oldnode != null && oldnode.ProjectNodeType == ProjectNodeType.Folder)  // TODO can't move folders yet :(
				return;
			
			if (oldparent == newparent && oldnode != null) // move/copy to the same location
				return;
			
			if (move) {
				if (oldnode != null) {
					oldparent.Nodes.Remove(oldnode);
				}
				File.Move(filename, newfilename);
			} else {
				File.Copy(filename, newfilename);
			}
			
			newparent.Nodes.Add(new ProjectBrowserNode(newparent.Project, ProjectNodeType.TextFile, name));
			browser.SaveProject();
		}
/*
========= Exception Text ==========
System.IO.DirectoryNotFoundException: Could not find a part of the path "C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\SharpDevelop Projects\directxtest\D3DLayer.cs".
   at System.IO.__Error.WinIOError(Int32 errorCode, String str)
   at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite)
   at SharpDevelop.Gui.Navigation.ProjectBrowser.ProjectBrowserEventHandler.MoveCopyFile(String filename, ProjectBrowserNode node, Boolean move)
   at SharpDevelop.Gui.Navigation.ProjectBrowser.ProjectBrowserEventHandler.AddFilesToProject(Object sender, EventArgs e)
   at System.Windows.Forms.MenuItem.OnClick(EventArgs e)
   at System.Windows.Forms.MenuItemData.Execute()
   at System.Windows.Forms.Command.Invoke()
   at System.Windows.Forms.Control.WmCommand(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.TreeView.WndProc(Message& m)
   at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
*/
		
		void ShowOpenFolderIcon(object sender, TreeViewCancelEventArgs e)
		{
			switch (((ProjectBrowserNode)e.Node).ProjectNodeType) {
				case ProjectNodeType.Folder:
					e.Node.ImageIndex = e.Node.SelectedImageIndex = 2;
					break;
				case ProjectNodeType.ReferenceFolder:
					e.Node.ImageIndex = e.Node.SelectedImageIndex = 4;
					break;
			}
		}
		
		void ShowClosedFolderIcon(object sender, TreeViewCancelEventArgs e)
		{
			switch (((ProjectBrowserNode)e.Node).ProjectNodeType) {
				case ProjectNodeType.Folder:
					e.Node.ImageIndex = e.Node.SelectedImageIndex = 1;
					break;
				case ProjectNodeType.ReferenceFolder:
					e.Node.ImageIndex = e.Node.SelectedImageIndex = 3;
					break;
			}
		}
		
		void RenameEntryEvent(object sender, EventArgs e)
		{
			ProjectBrowserNode node = (ProjectBrowserNode)browser.SelectedNode;
			if (node != null) {
				if (node.ProjectNodeType != ProjectNodeType.NonEditable     && 
					node.ProjectNodeType != ProjectNodeType.ReferenceFolder &&
					node.ProjectNodeType != ProjectNodeType.ResourceFolder  &&
					node.ProjectNodeType != ProjectNodeType.Reference)
					node.BeginEdit();
			}
		}
		
		void OpenFile(object sender, EventArgs e) 
		{
			ProjectBrowserNode node = (ProjectBrowserNode)browser.GetNodeAt(mousex, mousey);
			if (node != null) {
				if (node.ProjectNodeType != ProjectNodeType.NonEditable     && 
					node.ProjectNodeType != ProjectNodeType.Project         &&
					node.ProjectNodeType != ProjectNodeType.Folder          &&
					node.ProjectNodeType != ProjectNodeType.ReferenceFolder &&
					node.ProjectNodeType != ProjectNodeType.ResourceFolder) {
					mainwindow.OpenWindow(node.FileName);
				}
			}
		}
		
		void RenameEntry(object sender, NodeLabelEditEventArgs e)
		{
			ProjectBrowserNode node = (ProjectBrowserNode)e.Node;
			
			if (e.CancelEdit || node.Text == e.Label || e.Label == null)
				return;
			
			switch (node.ProjectNodeType) {
				case ProjectNodeType.Project:
					if (browser.Combine.MasterProjectName == node.Project.Name)
						browser.Combine.MasterProjectName = e.Label;
					node.Project.Name = e.Label;
					break;
				default:
//					Console.WriteLine("filename " + node.FileName);
					string oldname = node.FileName;
					string newname = node.GetNameWithExtension(Path.GetDirectoryName(oldname) + "\\" + e.Label);
					File.Move(oldname, newname);
					node.Name = e.Label;
					e.CancelEdit  = true; // don't set label automatically
					// rename open files
					foreach (ContentWindow window in mainwindow.MdiChildren) {
						if (oldname == window.FileName) {
							window.FileName = node.FileName;
							break;
						}
					}
					break;
			}
			browser.SaveProject();
		}
		
		void NewFileEvent(object sender, EventArgs e)
		{
			ProjectBrowserNode node = (ProjectBrowserNode)browser.SelectedNode;
			if (node == null)
				return;
			
			while (node.ProjectNodeType != ProjectNodeType.Folder && 
				   node.ProjectNodeType != ProjectNodeType.Project) {
				node = (ProjectBrowserNode)node.Parent;
				if (node == null)
					return;
			}
			NewFileDialog nfd = new NewFileDialog(mainwindow);
			if (nfd.ShowDialog() == DialogResult.OK) {
				ContentWindow cw = mainwindow.ActiveContentWindow;
				
				ProjectBrowserNode newfile = null;
				string filename  = "";
				int count = 0;
				switch (cw.Content) {
					case WindowContent.CSFile:
						do { 
							if (count == 0)
								filename = node.FileName + "\\"+ cw.TextName;
							else {
								string newText = cw.TextName;
								filename = node.FileName + "\\"+ Path.GetFileNameWithoutExtension(newText) + "_" + count + Path.GetExtension(newText);							}
							++count;
						} while (node.Project.IsFileInProject(filename));
						cw.SaveContent(filename);
						node.Project.Files.Add(filename);
						newfile = new ProjectBrowserNode(node.Project, ProjectNodeType.TextFile, Path.GetFileName(filename));
						break;
//					case WindowContent.Resource:
//						string directory = node.Project.BaseDirectory + "\\resources";
//						if (!Directory.Exists(directory))
//							Directory.CreateDirectory(directory);
//						do { 
//							filename = directory + "\\New File "+ ++count + ".resources";
//						} while (node.Project.IsFileInProject(filename));
//						cw.SaveContent(filename);
//						node.Project.Files.Add(filename);
//						newfile = new ProjectBrowserNode(node.Project, ProjectNodeType.ResourceFile, Path.GetFileName(filename));
//						break;
					default:
						do {
							filename = node.Project.BaseDirectory + "\\" + Resource.GetString("ProjectComponent.NewFileString") + ++count;
						} while (node.Project.IsFileInProject(filename));
						
						cw.SaveContent(filename);
						node.Project.Files.Add(filename);
						newfile = new ProjectBrowserNode(node.Project, ProjectNodeType.TextFile, Path.GetFileName(filename));
						break;
				}
				node.Nodes.Add(newfile);
				newfile.EnsureVisible();
				newfile.BeginEdit();
				browser.SaveProject();
			}
		}
		
		void NewFolderEvent(object sender, EventArgs e)
		{
			
			ProjectBrowserNode node = (ProjectBrowserNode)browser.SelectedNode;
			if (node == null)
				return;
			
			while (node.ProjectNodeType != ProjectNodeType.Folder && 
				   node.ProjectNodeType != ProjectNodeType.Project) {
				node = (ProjectBrowserNode)node.Parent;
				if (node == null)
					return;
			}
			
			ProjectBrowserNode newfolder = new ProjectBrowserNode(node.Project, ProjectNodeType.Folder, Resource.GetString("ProjectComponent.NewFolderString"));
			node.Nodes.Add(newfolder);
			Directory.CreateDirectory(newfolder.FileName);
			newfolder.EnsureVisible();
			newfolder.BeginEdit();
		}
		
		void RemoveEntryEvent(object sender, EventArgs e)
		{
//			if (browser.LabelEdit)
//				return;

			ProjectBrowserNode node = (ProjectBrowserNode)browser.SelectedNode;
			if (node != null && 
				node.ProjectNodeType != ProjectNodeType.NonEditable     && 
				node.ProjectNodeType != ProjectNodeType.Project         &&
				node.ProjectNodeType != ProjectNodeType.ReferenceFolder &&
				node.ProjectNodeType != ProjectNodeType.ResourceFolder) {
				string    filename      = node.FileName;
					
				DialogResult dr = MessageBox.Show(Resource.GetString("ProjectComponent.DeleteRemoveQuestion"), filename, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
				if (dr == DialogResult.Cancel)
					return;
					
				node.Parent.Nodes.Remove(node);
				
				if (dr == DialogResult.Yes) {
					if (FSTypeUtility.IsDirectory(filename)) {
						Directory.Delete(filename, true);
					} else
						File.Delete(filename);
				}
				browser.SaveProject();
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -