zoukankan      html  css  js  c++  java
  • 文本搜索工具之显示

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

        

    左侧用的是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         }

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

  • 相关阅读:
    微前端开发常见问题汇总
    什么是UUId?理解UUId的五个版本和使用
    前端实现.md文件转换成.html文件
    使用HTML5 SVG 标签
    小程序开发中遇到的问题
    Django REST framework+Vue 打造生鲜超市(十一)
    Django REST framework+Vue 打造生鲜超市(十)
    Django REST framework+Vue 打造生鲜超市(九)
    Django REST framework+Vue 打造生鲜超市(八)
    Django REST framework+Vue 打造生鲜超市(七)
  • 原文地址:https://www.cnblogs.com/headwolf/p/2725319.html
Copyright © 2011-2022 走看看