C#(winform) 操作.txt文本的例子

背景:一个可输入textbox,可以实现搜索功能
功能改进需求:把textbox改造成一个可输入的下拉框,下拉框的内容是历史搜索记录(最近20次输入搜索的内容)

代码:

using System.IO;
using System.Text.RegularExpressions;

private ArrayList _arrSearchHistory = null; // 全局变量 form_load时读取.txt文本中的内容 // 放在form_load中 ReadTxtFile(out _arrSearchHistory); if (_arrSearchHistory != null && _arrSearchHistory.Count > 0) { SetComboList(cboFilter, _arrSearchHistory, null, "", false, true); } // 加到搜索功能中 if (!string.IsNullOrEmpty(cboFilter.Text) && cboFilter.Text.Trim().Length>1) { AddItemToTxt(System.Windows.Forms.Application.StartupPath.Replace(@"bin\Debug", "") + "/Data/SearchHistory.txt", cboFilter.Text,out _arrSearchHistory); } //公共函数部分 private void ReadTxtFile(out ArrayList arrFile,int iTopRow=20) { arrFile = new ArrayList(); try { string sFileFullName = System.Windows.Forms.Application.StartupPath.Replace(@"bin\Debug", "") + @"/Data"; if (!System.IO.Directory.Exists(sFileFullName)) { System.IO.Directory.CreateDirectory(sFileFullName); } sFileFullName += @"/SearchHistory.txt"; if (!System.IO.File.Exists(sFileFullName)) { //System.IO.File.CreateText(sFileName); FileStream fs; fs = File.Create(sFileFullName); fs.Close(); } FileStream fsTxtFile = new FileStream(sFileFullName, FileMode.Open, FileAccess.Read); StreamReader sr = new StreamReader(fsTxtFile, System.Text.Encoding.Default); string sTemp; sTemp = sr.ReadLine(); int iTempRow=0; while (!string.IsNullOrEmpty(sTemp)) { iTempRow++; if (iTempRow > iTopRow) { break; } arrFile.Add(sTemp); sTemp = sr.ReadLine(); } sr.Close(); sr.Dispose(); fsTxtFile.Dispose(); } catch (Exception ex) { Common.DisplayMsg(this.Text, ex.Message.ToString()); } } /// <summary> /// 计算字符串中子串出现的次数 /// </summary> /// <param name="str">字符串</param> /// <param name="substring">子串</param> /// <returns>出现的次数</returns> public static int SubstringCount(string str, string substring) { if (str.Contains(substring)) { string strReplaced = str.Replace(substring, ""); return (str.Length - strReplaced.Length) / substring.Length; } return 0; } private void AddItemToTxt(string sFileFullName, string sNewItem,out ArrayList arrFile) { arrFile = _arrSearchHistory; try { string sTemp=""; using (StreamReader sr = new StreamReader(sFileFullName)) { sr.BaseStream.Flush(); sTemp = sr.ReadToEnd(); int iCount = SubstringCount(sTemp, "\r\n"); if (iCount > 20) { Regex reg = new Regex("\r\n"); Match mat = reg.Match(sTemp); int iCountTemp = 0; while (mat.Success) { iCountTemp++; //MessageBox.Show(mat.Index.ToString());//位置 if (iCountTemp > 20) { sTemp = sTemp.Substring(0, mat.Index); break; } mat = reg.Match(sTemp, mat.Index + mat.Length); } } } //if (File.Exists(sFileFullName)) //{ // File.Delete(sFileFullName); //} FileStream fsTxtWrite = new FileStream(sFileFullName, FileMode.Create, FileAccess.Write); StreamWriter srWrite = new StreamWriter(fsTxtWrite, System.Text.Encoding.UTF8); //StreamWriter srWrite = new StreamWriter(fsTxtWrite, System.Text.Encoding.Default); if (!sTemp.Contains(sNewItem)) { arrFile.Insert(0, sNewItem); srWrite.WriteLine(sNewItem); srWrite.Write(sTemp); } else { srWrite.Write(sTemp); } srWrite.Close(); srWrite.Dispose(); fsTxtWrite.Dispose(); } catch (Exception ex) { Common.DisplayMsg(this.Text, ex.Message.ToString()); } } // 设置下拉框 传入参数(需要设置的下拉框控件,查询的语句,默认第一行的内容) public static void SetComboList(DevExpress.XtraEditors.ComboBoxEdit ComboList, ArrayList arrSource = null, DataTable dtSource = null, string FirstRowText = "", bool bSelectFirstItem = false, bool bEditable = false) { DataTable dtList = null; if (dtSource != null) { dtList = dtSource; } else if (arrSource != null) { dtList = new DataTable(); dtList.Columns.Add("name"); foreach (string s in arrSource) { dtList.Rows.Add(s); } } else { return; } int intCount = (dtList != null) ? dtList.Rows.Count : 0; if (bEditable) { ComboList.Properties.TextEditStyle = TextEditStyles.Standard; } else { ComboList.Properties.TextEditStyle = TextEditStyles.DisableTextEditor; // 设置 comboBox的文本值不能被编辑 } ComboList.Properties.Items.Clear(); if (!string.IsNullOrEmpty(FirstRowText)) ComboList.Properties.Items.Add(FirstRowText); if (intCount > 0) { for (int i = 0; i < intCount; i++) { ComboList.Properties.Items.Add(dtList.Rows[i][0].ToString()); } } if (bSelectFirstItem) ComboList.SelectedIndex = 0; // 设置选中第1项 } public static void DisplayMsg(string sCaption, string sMsg) { XtraMessageBox.Show(sMsg, sCaption); }

希望能帮助到有需要的人。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值