主要功能:将用户上次打开过的文件记录添加到菜单栏中,方便用户直接单击打开文件
1.创建WinForm窗体应用程序
2.添加菜单栏控件
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace 带历史记录的菜单
{
public partial class fileHistory : Form
{
public fileHistory()
{
InitializeComponent();
}
string _fileHistory = System.Environment.CurrentDirectory; //获取当前程序的目录
/// <summary>
/// 打开文件菜单
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void openFileMenu_Click(object sender, EventArgs e)
{
OpenFileDialog openFile = new OpenFileDialog();
openFile.FileName = ""; //为了防止用户打开了文件对话框,却没有选择文件而导致抛异常
openFile.Title = "选择你要打开的文件";
openFile.Filter = "文本文件|*.txt|媒体文件|*.mp3|所有文件|*.*";
openFile.Multiselect = false;
openFile.InitialDirectory = @"C:\Users\Administrator\Desktop";
openFile.ShowDialog();
//创建一个streamWrite对象将用户名写入到ini文件
using (StreamWriter writeHistory = new StreamWriter(_fileHistory+"\\Menu.ini", true,Encoding.Default))
{
if (openFile.FileName != "")
{
writeHistory.WriteLine(openFile.FileName);
showFile(openFile.FileName);
}
}
}
/// <summary>
/// 将用户选择的文件显示到文本框
/// </summary>
/// <param name="filePath"></param>
private void showFile(string filePath)
{
using (FileStream readFile = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
int readCount = 0;
byte[] buffer = new byte[1024 * 1024];
do
{
readCount = readFile.Read(buffer, 0, buffer.Length);
textEduit.AppendText(Encoding.Default.GetString(buffer));
} while (readCount == buffer.Length); //若实际读到的字节数为缓冲区的长度,则继续读取文件
}
}
/// <summary>
/// 在程序加载时给历史记录中的内容添加菜单
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void fileHistory_Load(object sender, EventArgs e)
{
using (StreamReader readHistory = new StreamReader(_fileHistory+"\\Menu.ini", Encoding.Default))
{
int menueIndex = this.fileMenue.DropDownItems.Count; //统计fileMenue中菜单个数,将历史记录中内容添加到菜单栏末尾
//未读到文件末尾
while (!readHistory.EndOfStream)
{
string hisFilePath = readHistory.ReadLine();
ToolStripMenuItem menue = new ToolStripMenuItem(hisFilePath); //创建菜单对象
this.fileMenue.DropDownItems.Insert(menueIndex, menue);//向菜单中添加子菜单
menue.Click += new EventHandler(menue_Click);//为添加的子菜单添加单击事件
menueIndex++;
}
}
}
/// <summary>
/// 为历史文件记录添加单击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void menue_Click(object sender, EventArgs e)
{
ToolStripMenuItem menue = sender as ToolStripMenuItem;
showFile(menue.Text);
}
/// <summary>
/// 清空历史记录,将保存历史记录文件中的内容清空
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void clearHistory_Click(object sender, EventArgs e)
{
using(StreamWriter clearFile=new StreamWriter (_fileHistory+"\\Menu.ini",false))
{
clearFile.Write("");
}
}
}
}