张磊(Avraber)

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.小说阅读器
   解题思路 :
  1.1  拖入控件splitContainer,这个控件中间有分割线。
  1.2  左侧拖入Treeview控件,选择在父容器停靠。右侧拖入txtbox,多行模式,属性中dock选择fill.
  1.3  双击窗口,进入Load事件,是初始化加载。创建路径Path,创建根节点“小说”,并返回类型为TreeNode的节点标记
            TreeNode tn = TreeView1.Content.Nodes.Add("小说");
            string path = Path.GetFullPath(@"txt");
            GetTree(tn, path);
  1.4  为了显示左边树形列表,需要创建递归方法
     public void GetTree(TreeNode tn, string path)
        {
            string[] folder = Directory.GetDirectories(path);  //获得当前文件夹的子文件夹目录
            string[] file = Directory.GetFiles(path,"*.txt");  //  过得当前目录得文件,删选出txt后缀名的文件

            for (int i = 0; i < folder.Length; i++)
            {
                TreeNode tn1 = tn.Nodes.Add(Path.GetFileName(folder[i]));  //将获得的子文件夹目录加到节点上   注意前面的tn
                GetTree(tn1, folder[i]);
            }
            for (int i = 0; i < file.Length; i++)
            {
                TreeNode tn2=tn.Nodes.Add(Path.GetFileName(file[i]));  //在节点文件夹上增加文件名,  注意前面的tn
                tn2.Tag = file[i];   //把文件信息给予Tag,Tag用于存储信息
            }
        }

1.5 选择TreeView的 afterselect事件,表示点击后触发的事件
     private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (e.Node.Tag != null) //点击节点后文件信息不为空
            {
                textBox1.Text = File.ReadAllText(e.Node.Tag.ToString(), Encoding.Default);
            }
        }
  1.6 textbox的属性中,scrollBars显示为Both,表示显示滚动条

2.查找工具
解题思路:
1.1 创建窗体,有3个Textbox,分别对应输入要查询的内容,选择要查询的文件夹,和输出结果。
1.2 选择文件夹用FolderBrowserDialog。
    FolderBrowserDialog fbd = new FolderBrowserDialog();
            if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                textBox3.Text = fbd.SelectedPath;
            }
1.3 执行查询
       List<string> listres = new List<string>();   //创建集合,用于存储搜索到的结果。
        private void button1_Click(object sender, EventArgs e)
        {
            listres.Clear();              //清空集合里的内容,再次点击查询的时候不会留下上次的数据。
            GetRes(textBox3.Text.Trim(), listres);
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < listres.Count; i++)
            {
                sb.AppendFormat("{0}\r\n", listres[i]);
            }
            textBox2.Text = sb.ToString();
        }
        /// <summary>
        /// 递归方法,执行查询
        /// </summary>
        /// <param name="path"></param>
        /// <param name="list"></param>
        public void GetRes(string path, List<string> list)
        {
            string[] folder = Directory.GetDirectories(path); //获得文件夹名称,folder中存储的为全路径
            string[] files = Directory.GetFiles(path);    //获得文件名称,files中存储的为全路径
            for (int i = 0; i < folder.Length; i++)
            {
                GetRes(folder[i], list);                   //递归方法,查询出所有的文件夹
            }
            for (int i = 0; i < files.Length; i++)
            {
                string temp = File.ReadAllText(files[i], Encoding.Default);  //查询文件,看是否包含所需的内容
                if (temp.Contains(textBox1.Text.Trim()))                     //有此内容的话则把完整路径添加如集合中
                { 
                    list.Add(files[i]);
                }
            }
        }

posted on 2012-07-04 18:52  张磊(Avraber)  阅读(936)  评论(0)    收藏  举报