using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System.Collections; namespace Findword { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private string Findwordpy(string str, string Findtext, out string word) { int p = str.IndexOf(" "); string py = str.Substring(0, p - 1); string newstr = str.Substring(p).Trim();//取后面的 string[] strarr = newstr.Split(' '); word = ""; for (int i = 0; i < strarr.Length; i++) { if (strarr[i].IndexOf(Findtext) > -1) { word = word + strarr[i].Trim() + " "; } } word = word.Trim(); return py; } private void btnFind_Click(object sender, EventArgs e) { string Findtext = tbword.Text.Trim(); if (Findtext == "") { MessageBox.Show("查找词组的单词不能空"); return; } string fileName = Application.StartupPath + @"/py.txt"; if (!File.Exists(fileName)) { MessageBox.Show(String.Format("文件{0}不存在", fileName)); return; } //---------读--------- FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); StreamReader m_streamReader = new StreamReader(fs, System.Text.Encoding.GetEncoding("GB2312"));//中文乱码加上System.Text.Encoding.Default,或则System.Text.Encoding.GetEncoding("GB2312") //使用StreamReader类来读取文件 m_streamReader.BaseStream.Seek(0, SeekOrigin.Begin); // 从数据流中读取每一行,直到文件的最后一行,并在richTextBox1中显示出内容 string strLine = m_streamReader.ReadLine(); listView1.BeginUpdate(); listView1.Items.Clear(); int n = 0; while (strLine != null) { if (strLine.IndexOf(Findtext) > 0) { string word; string py = Findwordpy(strLine, Findtext, out word); string[] wordarr = word.Split(' '); //MessageBox.Show(py + " " + word.ToString()); for (int j = 0; j < wordarr.Length; j++) { ListViewItem item1 = new ListViewItem(wordarr[j], 0); item1.SubItems.Add(py); listView1.Items.Add(item1); n++; } } strLine = m_streamReader.ReadLine(); } //关闭此StreamReader对象 m_streamReader.Close(); listView1.EndUpdate(); toolStripStatusLabel1.Text = string.Format("找到{0}条", n); } private void listView1_ColumnClick(object sender, ColumnClickEventArgs e) { ListView lv = sender as ListView; // 检查点击的列是不是现在的排序列. if (e.Column == (lv.ListViewItemSorter as ListViewColumnSorter).SortColumn) { // 重新设置此列的排序方法. if ((lv.ListViewItemSorter as ListViewColumnSorter).Order == SortOrder.Ascending) { (lv.ListViewItemSorter as ListViewColumnSorter).Order = SortOrder.Descending; } else { (lv.ListViewItemSorter as ListViewColumnSorter).Order = SortOrder.Ascending; } } else { // 设置排序列,默认为正向排序 (lv.ListViewItemSorter as ListViewColumnSorter).SortColumn = e.Column; (lv.ListViewItemSorter as ListViewColumnSorter).Order = SortOrder.Ascending; } // 用新的排序方法对ListView排序 ((ListView)sender).Sort(); } private void Form1_Load(object sender, EventArgs e) { this.listView1.ListViewItemSorter = new ListViewColumnSorter(); //this.listView1.ColumnClick += new ColumnClickEventHandler(ListView_ColumnClick); } private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) { } private void 复制ToolStripMenuItem_Click(object sender, EventArgs e) { if (this.listView1.SelectedItems.Count < 1) return; string rstr = ""; foreach (ListViewItem item1 in this.listView1.SelectedItems) { //MessageBox.Show(item1.SubItems[0].Text); rstr=rstr+item1.SubItems[0].Text+" "+item1.SubItems[1].Text+"/r/n"; } Clipboard.Clear(); Clipboard.SetDataObject(rstr); } } /** <summary> /// 继承自IComparer /// </summary> public class ListViewColumnSorter : IComparer { /** <summary> /// 指定按照哪个列排序 /// </summary> private int ColumnToSort; /** <summary> /// 指定排序的方式 /// </summary> private SortOrder OrderOfSort; /** <summary> /// 声明CaseInsensitiveComparer类对象, /// 参见ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemCollectionsCaseInsensitiveComparerClassTopic.htm /// </summary> private CaseInsensitiveComparer ObjectCompare; /** <summary> /// 构造函数 /// </summary> public ListViewColumnSorter() { // 默认按第一列排序 ColumnToSort = 0; // 排序方式为不排序 OrderOfSort = SortOrder.None; // 初始化CaseInsensitiveComparer类对象 ObjectCompare = new CaseInsensitiveComparer(); } /** <summary> /// 重写IComparer接口. /// </summary> /// <param name="x">要比较的第一个对象</param> /// <param name="y">要比较的第二个对象</param> /// <returns>比较的结果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns> public int Compare(object x, object y) { int compareResult; ListViewItem listviewX, listviewY; // 将比较对象转换为ListViewItem对象 listviewX = (ListViewItem)x; listviewY = (ListViewItem)y; // 比较 compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text); // 根据上面的比较结果返回正确的比较结果 if (OrderOfSort == SortOrder.Ascending) { // 因为是正序排序,所以直接返回结果 return compareResult; } else if (OrderOfSort == SortOrder.Descending) { // 如果是反序排序,所以要取负值再返回 return (-compareResult); } else { // 如果相等返回0 return 0; } } /** <summary> /// 获取或设置按照哪一列排序. /// </summary> public int SortColumn { set { ColumnToSort = value; } get { return ColumnToSort; } } /** <summary> /// 获取或设置排序方式. /// </summary> public SortOrder Order { set { OrderOfSort = value; } get { return OrderOfSort; } } } }