文本搜索工具之显示

这个小工具纯粹是学习练手用的,好多地方考虑不周还望海涵,有好的建议还望指教,谢谢。

    

左侧用的是ListBox控件,而右侧用的则是richTextBox控件,第一步实现点击左侧相应的列在右边显示对应的文件内容,并将关键字高亮显示。

 1 Encoding encode = Encoding.Default;//这里定义了一个全局的Encoding变量,为后面更改编码时使用
 2         private void listBox1_Click(object sender, EventArgs e)
 3         {    
 4             if (listBox1.Items.Count == 0)
 5                 return;
 6             //获取选中项中保存的文件地址
 7             string filename = listBox1.SelectedItem.ToString();
 8             //通过File类的ReadAllText方法将文件中的文本读取出来
 9             string content = File.ReadAllText(filename, encode);
10             //将文本内容显示在richTextBox1上
11             richTextBox1.Clear();
12             richTextBox1.Text = content;
13             //使用正则表达式找出正文中的匹配关键字的Match集合
14             MatchCollection mc = Regex.Matches(content, txtKeys.Text);
15             
16             foreach (Match m in mc)
17             {
18                 int pos = 0;//定位richTextBox中匹配到的关键字的起始位置
19                 while (pos < richTextBox1.Text.Length)
20                 {
21                     if (m.Success)
22                     {
23                         //使用richTextBox控件的Find方法查找关键字在文本中的位置,并将起始位置更新
24                         pos = richTextBox1.Find(m.Value, pos, richTextBox1.Text.Length, RichTextBoxFinds.None);
25                         if (pos == -1)
26                         {
27                             //如果返回的是-1,说明没有找到,则退出
28                             break;
29                         }
30                         else
31                         {
32                             //将查找的起始位置更新为加上关键字的长度,也就是从关键字之后再开始查找
33                             pos += m.Value.Length;
34                         }
35                         if (richTextBox1.SelectedText.Length > 0)
36                         {
37                             //接下来就是将查找到的关键字高亮显示为特定的颜色,这里用灰色
38                             richTextBox1.SelectionBackColor = Color.Gray;
39                         }
40                     }
41                 }
42             }
43         }

    现在我们已经可以搜索到内容并且显示出来了,但这样看着不爽,我就想在原文件中用系统的默认程序打开该文件,或者直接打开该文件的存放目录岂不是更好,这里我用一个右键菜单contextMenuStrip1控件,但是在右键的时候右键位置的选中有一点问题,默认选中是在单击的时候,网上找了一下,这里的解决方法是在listBox1_MouseDown事件中判断是右键点击的就启动右键菜单,当然有更好的方法可以告诉我,呵呵,先谢谢了。

 1 //ListBox右键单击
 2         string contextMenuStr = string.Empty;//用来存放右键时选中项的文件地址
 3         private void listBox1_MouseDown(object sender, MouseEventArgs e)
 4         {
 5             //判断是鼠标右键
 6             if (e.Button == MouseButtons.Right)
 7             {
 8                 //通过鼠标位置获取点击项的索引
 9                 int index = listBox1.IndexFromPoint(e.X, e.Y);
10                 if (index >= 0)
11                 {
12                     //将选中项设为点击到的项
13                     listBox1.SelectedIndex = index;
14                     //将文件地址保存
15                     contextMenuStr = listBox1.Items[index].ToString();
16                     //指定右键菜单
17                     listBox1.ContextMenuStrip = contextMenuStrip1;
18                 }
19             }
20         }

    然后,在右键菜单中添加菜单项,这里有“复制到剪贴板”,“打开文件目录”和“打开文件”,代码如下:

 1 //复制文件名到剪贴板
 2         private void 复制文件全名ToolStripMenuItem_Click(object sender, EventArgs e)
 3         {
 4             Clipboard.SetData(DataFormats.Text, contextMenuStr);
 5         }
 6         //通过资源管理器打开文件所在的目录
 7         private void 打开文件目录ToolStripMenuItem_Click(object sender, EventArgs e)
 8         {
 9             string filePath = contextMenuStr;
10             System.Diagnostics.Process.Start("Explorer", "/select," + filePath);
11         }
12         //将文件打开
13         private void 打开文件ToolStripMenuItem_Click(object sender, EventArgs e)
14         {
15             string filePath = contextMenuStr;
16             System.Diagnostics.Process.Start(filePath);
17         }

这时就可以在文件夹中打开找到的文件了。

posted @ 2012-10-16 00:26  雪空子  阅读(582)  评论(0编辑  收藏  举报