今天继续写下小项目记事本。利用xml文件的读取和写入,把用户最近打开的前五个文件存入xml中,然后每次打开程序的时候,从xml中读取,显示在最近打开的文件的菜单项中。利用的是.Net中的XmlDocument这个类。

今天做了一些常用的功能的实现,编辑方面的复制,清除,剪切,粘贴,全选,撤消等,其实这就对应着richTextBox这个文本控件的一些方法,只需要一条代码就够了。格式方面的字体设置,颜色设置分别利用到了FontDialog,ColorDialog这些对话框,还算简单。添加时间,并在状态栏中实时显示当前的时间,自动换行,字数统计,行数统计,路径查看等一些小功能的实现。文本框和文本标题栏右键菜单的实现。文件方面的另存为,保存,退出,打开,新建方面的健全(然后听到色友在讲梦话了,哈哈)剩下的能想到的功能还需要实现的是查找替换,工具栏的实现,快捷键的设置,显示行号,格式化cs文件,显示当前字符的行和列坐标,cs文件的运行等等。再多学学咯。微软确实为我们封装了很多的方法,就连ctrlV,ctrlC都不用自己再开发了,一运行一按,就有了。

明天估计要正式动工了。老师们的数据库讨论得差不多了。也分配了各自的任务,其中我分配到的是学生状态信息维护和学生异动信息的模块。表应该不是很复杂。第一感觉就是,老师怎么不分配那个难点的给我,明显是看不起我。哈哈,太不行了。老师又不知道你的水有多浅,只能按他眼里自己的主观看法来判断咯。即使简单,你把它快点做好,而且做得有质量,并且能从中得到水平的提升,这才是最重要的。水涨船高。你现在是个菜鸟,要学的,就是为飞做准备。明天好好研究下那数据表,想下如何搭建界面,如何开发。

多多学点知识,有太多的知识点,要去学咯。即使只是在.net这一方面。

下面是那个记事本小项目的文件操作类

 

   
   
   
   
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Windows.Forms;  
  6. using System.Xml;  
  7.  
  8. namespace notePadV1._0  
  9. {  
  10.     public class FileOperator  
  11.     {  
  12.         private string xmlFilePath;  
  13.         private TabControl tabTxt;  
  14.         private ContextMenuStrip rightMenu;  
  15.         //计算新建文件的数目   
  16.         private static int newFileNum = 0;  
  17.         //存储每个文档的文本框  
  18.         private List rtbList = new List();  
  19.         //存储每个文档的地址  
  20.         private Dictionary<stringstring> pathDictionary = new Dictionary<stringstring>();  
  21.          
  22.         //查找文件的路径  
  23.         public  string FindFilePath(string fileName)  
  24.         {  
  25.             try 
  26.             {  
  27.                 return pathDictionary[fileName];  
  28.             }  
  29.             catch 
  30.             {  
  31.                 return null;  
  32.             }  
  33.         }  
  34.         //返回richBox  
  35.         public RichTextBox GetRichBox(int num)  
  36.         {  
  37.             return rtbList[num];  
  38.         }  
  39.           
  40.         public FileOperator(TabControl tab,ContextMenuStrip menu)  
  41.         {  
  42.             tabTxt = tab;  
  43.             rightMenu = menu;  
  44.             xmlFilePath = @"E:\快盘\notePadV1.0\notePadV1.0\bin\Debug\file.xml";  
  45.         }  
  46.         //载入最近打开的文件  
  47.         public void LoadFile(ToolStripMenuItem menuItem)  
  48.         {  
  49.             int loadFileNum = 0;  
  50.             XmlDocument doc = new XmlDocument();  
  51.             try 
  52.             {  
  53.                 doc.Load(xmlFilePath);  
  54.             }  
  55.             catch (Exception ex)  
  56.             {  
  57.  
  58.                 MessageBox.Show("载入xml文件出现错误:" + ex.ToString());  
  59.             }  
  60.             XmlNodeList fileList = doc.SelectNodes("/files/file/path");  
  61.             if (fileList != null )  
  62.             {  
  63.                 foreach (XmlNode n in fileList)  
  64.                 {  
  65.                     if (loadFileNum == 5) break;  
  66.                     ToolStripMenuItem t = new ToolStripMenuItem(n.InnerText);  
  67.                     t.Click += new EventHandler(t_Click);  
  68.                     loadFileNum++;  
  69.                     menuItem.DropDownItems.Add(t);  
  70.                 }  
  71.             }  
  72.         }  
  73.         
  74.         //新建文件  
  75.         public void NewFile()  
  76.         {  
  77.             if (tabTxt.TabPages.Count == 0) newFileNum = 0;  
  78.             newFileNum++;  
  79.             TabPage tab1 = new TabPage("file" + newFileNum);  
  80.             RichTextBox rich = new RichTextBox();  
  81.             rich.Dock = DockStyle.Fill;  
  82.             rich.ContextMenuStrip = rightMenu;  
  83.             rich.TextChanged += new EventHandler(this.richTextBox_TextChanged);  
  84.             tab1.Controls.Add(rich);  
  85.             rtbList.Add(rich);  
  86.             tabTxt.Controls.Add(tab1);  
  87.             tabTxt.SelectedTab = tab1;  
  88.         }  
  89.         //打开文件  
  90.         public  void OpenFile(string fileName,string filePath)  
  91.         {  
  92.  
  93.             
  94.                 TabPage tab1 = new TabPage(fileName);  
  95.                 try 
  96.                 {  
  97.                     pathDictionary.Add(fileName, filePath);  
  98.                 }  
  99.                 catch 
  100.                 {  
  101.                     MessageBox.Show("打开的文件已经存在程序中");  
  102.                     return;  
  103.                 }  
  104.  
  105.                 RichTextBox rich = new RichTextBox();  
  106.                 try 
  107.                 {  
  108.                     rich.LoadFile(filePath, RichTextBoxStreamType.PlainText);  
  109.                 }  
  110.                 catch 
  111.                 {  
  112.                     MessageBox.Show("当前文件不存在");  
  113.                     return;  
  114.                 }  
  115.                 rich.Dock = DockStyle.Fill;  
  116.                 rich.TextChanged += new EventHandler(this.richTextBox_TextChanged);  
  117.                 rich.ContextMenuStrip = rightMenu;  
  118.                 rtbList.Add(rich);  
  119.                  
  120.                 tab1.Controls.Add(rich);  
  121.                 tabTxt.Controls.Add(tab1);  
  122.                 //使打开的窗口为激活状态  
  123.                 tabTxt.SelectedTab = tab1;  
  124.                 SaveInXml(filePath);  
  125.  
  126.               
  127.         }  
  128.         //将打开的文件保存在xml文件中  
  129.         private void SaveInXml(string filePath)  
  130.         {  
  131.             XmlDocument doc = new XmlDocument();  
  132.             doc.Load(xmlFilePath);  
  133.             XmlElement root = doc.DocumentElement;  
  134.             XmlElement newFile = doc.CreateElement("file");  
  135.             XmlElement newDate = doc.CreateElement("date");  
  136.             XmlElement newPath = doc.CreateElement("path");  
  137.  
  138.             XmlText date = doc.CreateTextNode(DateTime.Now.ToString());  
  139.             XmlText path = doc.CreateTextNode(filePath);  
  140.  
  141.             root.AppendChild(newFile);  
  142.             newFile.AppendChild(newDate);  
  143.             newFile.AppendChild(newPath);  
  144.  
  145.             newDate.AppendChild(date);  
  146.             newPath.AppendChild(path);  
  147.  
  148.             root.InsertBefore(newFile, root.FirstChild);  
  149.             doc.Save(xmlFilePath);  
  150.  
  151.         }  
  152.         //保存文件  
  153.         public void Save()  
  154.         {  
  155.             if (tabTxt.SelectedTab.Text.Contains('*'))  
  156.             {  
  157.                 // tabTxt.SelectedTab.Text = tabTxt.SelectedTab.Text.Remove(tabTxt.SelectedTab.Text.Length - 1);  
  158.                 tabTxt.SelectedTab.Text = RemoveUnSave(tabTxt.SelectedTab);  
  159.             }  
  160.             if (tabTxt.SelectedTab.Text.Contains(".txt") || tabTxt.SelectedTab.Text.Contains(".cs"))  
  161.             {  
  162.                 rtbList[tabTxt.SelectedIndex].SaveFile(pathDictionary[tabTxt.SelectedTab.Text], RichTextBoxStreamType.PlainText);  
  163.                 return;  
  164.             }  
  165.             else 
  166.             {  
  167.                 SaveFileDialog save = new SaveFileDialog();  
  168.                 save.FileName = "file1";  
  169.                 save.Filter = "文本文件(*.txt)|*.txt|CSharp文件(*.cs)|*.cs";  
  170.                 if (save.ShowDialog() == DialogResult.OK)  
  171.                 {  
  172.                     rtbList[tabTxt.SelectedIndex].SaveFile(save.FileName, RichTextBoxStreamType.PlainText);  
  173.                     tabTxt.SelectedTab.Text = save.FileName.Substring(save.FileName.LastIndexOf('\\') + 1);  
  174.                     SaveInXml(save.FileName);  
  175.                 }  
  176.                 pathDictionary.Add(tabTxt.SelectedTab.Text, save.FileName);  
  177.             }  
  178.  
  179.         }  
  180.         //另存为文件  
  181.         public void SaveAs()  
  182.         {  
  183.             SaveFileDialog save = new SaveFileDialog();  
  184.             save.FileName = "file1";  
  185.             save.Filter = "文本文件(*.txt)|*.txt|CSharp文件(*.cs)|*.cs";  
  186.             if (save.ShowDialog() == DialogResult.OK)  
  187.             {  
  188.                 string filePath = save.FileName;  
  189.                 rtbList[tabTxt.SelectedIndex].SaveFile(filePath, RichTextBoxStreamType.PlainText);  
  190.                 pathDictionary.Remove(tabTxt.SelectedTab.Text);  
  191.                 tabTxt.SelectedTab.Text = save.FileName.Substring(filePath.LastIndexOf('\\') + 1);  
  192.                 SaveInXml(filePath);  
  193.             }  
  194.             
  195.         }  
  196.         //关闭文件  
  197.         public bool CloseFile()  
  198.         {  
  199.             if (tabTxt.TabPages.Count == 0)  
  200.             {  
  201.                 return false;  
  202.             }  
  203.             if (tabTxt.SelectedTab.Text.Contains('*'))  
  204.             {  
  205.                 if (MessageBox.Show("当前文件未保存,是否保存""提示", MessageBoxButtons.YesNo) == DialogResult.Yes)  
  206.                 {  
  207.                     Save();  
  208.                 }  
  209.  
  210.             }  
  211.             pathDictionary.Remove(tabTxt.SelectedTab.Text);  
  212.             rtbList.RemoveAt(tabTxt.SelectedIndex);  
  213.             tabTxt.Controls.Remove(tabTxt.SelectedTab);  
  214.             return true;  
  215.         }  
  216.  
  217.         //当文本发生改变时,发生  
  218.         private void richTextBox_TextChanged(object sender, EventArgs e)  
  219.         {  
  220.             RichTextBox r = sender as RichTextBox;  
  221.             TextChange(r);  
  222.  
  223.  
  224.         }  
  225.         //打开最近的文件列表中的文件  
  226.         private void t_Click(object sender, EventArgs e)  
  227.         {  
  228.             ToolStripMenuItem t = sender as ToolStripMenuItem;  
  229.             OpenFile(t.Text.Substring(t.Text.LastIndexOf('\\') + 1), t.Text);  
  230.  
  231.         }  
  232.         //文本发生改变,显示未保存方法  
  233.         private  void TextChange(RichTextBox r)  
  234.         {  
  235.             string pageTxt = tabTxt.TabPages[rtbList.IndexOf(r)].Text;  
  236.             if (pageTxt.Contains('*'))  
  237.             {  
  238.                 return;  
  239.             }  
  240.             else 
  241.             {  
  242.                 tabTxt.TabPages[rtbList.IndexOf(r)].Text = pageTxt + "*";  
  243.             }  
  244.         }  
  245.         //移除未保存的符号  
  246.         private string RemoveUnSave(TabPage t)  
  247.         {  
  248.             return t.Text.Remove(t.Text.Length - 1);  
  249.         }  
  250.  
  251.  
  252.     }