阅读跟上次没有差别,这次增加了书架功能,下方的导入书籍可以在书架导入新书籍,在书籍上点击鼠标右键可以打开书籍或者从书架中移除书籍(只是移除书架中的书籍,不会删除文本).

1. 本来想用数据库来存储导入书籍的信息,但是存储的数据比较少而且数据库安装太大,于是选择使用txt文本存储数据。下面是生成书架的代码。界面初始化时读取txt文本中已经添加的书籍。

 private void BookShelf(){//文件路径string filePath = @"../../TXT/bookshelf.txt";try{if (File.Exists(filePath)){string[] strContent = File.ReadAllLines(filePath, Encoding.UTF8);for (int i = 0; i < strContent.Length; i++){ShowBook(strContent);}}else{MessageBox.Show("缺少系统文件");}}catch (Exception ex){MessageBox.Show(ex.Message);}}

2. 这里生成图书的封面,在选项卡中动态生成PictureBox和label标签组成书架上的图书

  private void ShowBook(string[] strContent){int ShowColumnNumber = 5;// (6 * pictureBox2.Width) / 784;//每一行显示的列数int controlWidth = 125;//每个控件占位宽度int controlHeight = 144;//每个控件占位高度// DisposeControls(pictureBox1);//清除Image myBitmap;myBitmap = Image.FromFile(Application.StartupPath + @"\Icon\001.jpg");int num = 0;//防止空行影响坐标for (int i = 0; i < strContent.Length; i++){if (strContent[i].Trim()!=""){string[] strArray = strContent[i].Split('|');int RowsCount = num / ShowColumnNumber;/********图片***********/PictureBox pic = new PictureBox{Size = new Size(76, 100),Name = strArray[1],Parent = tabPage2,Location = new Point(controlWidth * (num - ShowColumnNumber * RowsCount) + 35, RowsCount * controlHeight + 25)//设置坐标};//绑定右键菜单pic.ContextMenuStrip = contextMenuStrip1;//pic.Click += B_Click;pic.SizeMode = PictureBoxSizeMode.StretchImage;pic.Image = myBitmap;this.tabPage2.Controls.Add(pic);/*********标签**********/int LocationW = controlWidth * (num - ShowColumnNumber * RowsCount) + 35;//坐标X点int LocationH = RowsCount * controlHeight + 136;//坐标Y点Label lab = new Label{Size = new Size(120, 30),//设置大小Location = new Point(LocationW, LocationH),//设置坐标Text = strArray[0]};//初始化一个控件this.tabPage2.Controls.Add(lab);num++;//不为空的行才进行绘画}}}

3.添加右键菜单的功能代码,打开功能为将读取到的小说目录和内容放到主页在上一次的代码中有,删除操作操作TXT文本有点麻烦,由于File中没有直接修改文本的方法,只能先读取原来的所有文本,在使用list盛放时把需要删除的小说排除后,清空原来的txt再写入新的书籍信息。用一个全局变量来存放书籍的地址,在contextMenuStrip1_Opening事件中将选中PictureBox所代表图书的路径放进去。否则打开和删除的事件无法找到当前书籍的信息。

        string PicPath = "";//左键菜单private void 打开ToolStripMenuItem_Click(object sender, EventArgs e){                        string path = PicPath;//MessageBox.Show(path);if (File.Exists(path)){this.tabControl1.SelectedIndex = 0;ImportBooks(path);}else{MessageBox.Show("此书已经不在!");BookShelf();//this.tabControl1.SelectedIndex = 1;}}private void 删除ToolStripMenuItem_Click(object sender, EventArgs e){string filePath = @"../../TXT/bookshelf.txt";try{if (File.Exists(filePath)){//将bookshelf.txt所有行导出string[] strContentOld = File.ReadAllLines(filePath, Encoding.UTF8);//创建一个新的容器List<string> strContentNew = new List<string>();//遍历bookshelf.txt 将要删除的行排除后的所有行添加到新容器for (int i = 0; i < strContentOld.Length; i++){if (strContentOld[i].Trim() == ""){continue;}string[] strArray = strContentOld[i].Split('|');if (strArray[1] != PicPath){//strContentNew[i] = strContentOld[i];strContentNew.Add(strContentOld[i]);}}//清空bookshelf.txtFile.WriteAllText(filePath, string.Empty);//将排除要删除行的新数组写进bookshelf.txt中for (int i = 0; i < strContentNew.Count; i++){byte[] mybyte = Encoding.UTF8.GetBytes(strContentNew[i] + "\n");string mystr1 = Encoding.UTF8.GetString(mybyte);File.AppendAllText(filePath, mystr1);//添加至文件}}else{MessageBox.Show("缺少系统文件");}}catch (Exception ex){MessageBox.Show(ex.Message);}DisposeControls(tabPage2);BookShelf();}private void contextMenuStrip1_Opening(object sender, CancelEventArgs e){PicPath = (sender as ContextMenuStrip).SourceControl.Name;//MessageBox.Show(PicPath);}

TXT阅读器 C# winfrom 开发相关推荐

  1. WPF开发txt阅读器7:自定义文字和背景颜色

    文章目录 添加控件 具体实现 代码说明 txt阅读器系列: 需求分析和文件读写 目录提取类

  2. 评测三款最流行的txt阅读器(ios手机适用)

    IOS上有哪些好用的txt阅读器?小编找了三款网络上呼声最高的进行试用,分别是 ,发现各有特点.一起来看看吧. 1 neat reader Neat Reader是一款比较轻量级的阅读器,可以跨平台使 ...

  3. 评测三款最流行的txt阅读器(windows适用)

    不知道大家常用的txt阅读器是什么呢?对于经常看电子书的小伙伴来说,txt这种电子书格式一定是很熟悉的,而能姿势优美地解析txt的阅读器软件却不算多.在这里我给大家评测3种windows上可用的txt ...

  4. 评测3款高颜值的安卓txt阅读器

    txt阅读器作为一种特殊文件的解析软件,把文件解析得精美.吸引人观看,且配套的标注.笔记功能齐全,才能称之为比较合格的txt阅读器.以下是三款适配安卓系统的高颜值txt评测结果:  1.Neat Re ...

  5. 安卓手机上最好的3个txt阅读器

    txt格式是一款非常常见的电子书格式,很多手机由于自身不能直接打开txt格式文件或者软件使用感较差而给我们阅读带来困扰.今天小编就为大家介绍3款可以在安卓手机上使用的txt阅读器. 第一款:neat ...

  6. 评测三款高颜值的txt阅读器(ios手机适用)

    IOS上有哪些好用的.能解析txt格式的.颜值还高的阅读器?小编找了三款设计比较出色的进行试用,一起来看看吧. 1 neat reader 相信很多人都用过它,软件如其名,在前端设计上是费了心思的. ...

  7. 评测3款最流行的安卓txt阅读器

    这三款是txt书迷最常用的三款适配安卓手机的txt阅读器,可以说只要搜索安卓txt阅读器,大部分人都会向你推荐这三款.那么它到底孰优孰劣,哪个更适合你呢?我把特征简要总结了一下. 1.Neat Rea ...

  8. 最好的3个iOS苹果手机上的txt阅读器

    身边很多朋友都喜欢用手机阅读txt小说,今天小编将为大家推荐iOS苹果手机上最好的3个txt阅读器. Top1:neat reader 这款在小编用过的阅读器中绝对排第一位,软件界面颜值很高,对追求界 ...

  9. 评测三款最流行的txt阅读器

    哪款txt阅读器读小说最好用?我把网上呼声最高的三款下载试用了一下,以下是体验: 1.Neat Reader Neat Reader是一款比较轻量级的阅读器,可以跨平台使用的TXT阅读器,在手机端.P ...

最新文章

  1. p40与p100训练性能对比
  2. java获取浏览器版本号
  3. IOS7实现扫描二维码
  4. FPGA学习笔记---Modelsim使用技巧总结
  5. 验证javascript错误使用Google Analytics(分析、统计)
  6. 【渝粤教育】国家开放大学2019年春季 0692-22T化工设备机械基础 参考试题
  7. 2016 【第七届蓝桥杯省赛】 C/C++ B组
  8. *学生管理系统java面向对象版本
  9. raid硬盘速度测试软件,RAID 0模式下固态硬盘性能测试
  10. 公有云上应该怎么做容灾?
  11. vagrant 设置除默认工项目之外的synced_folder一个坑
  12. Unity3D研究院之在MAC上脚本XlsxWriter写入Excel .xlsx格式
  13. 访问Oracle数据库的四款工具软件介绍
  14. 正方形UVa201-紫书习题4-2(详细解答)
  15. Redis主从模式下从库过期的key仍然能够被读到的解决方案
  16. Symfony 初步了解
  17. acm中的概率和期望类题目 挖坑
  18. ORACLE RAC TO RAC DG搭建过程中可能遇到的问题
  19. 加密相册、保险箱App打开就闪退、点击提示App Store不提供应用、需要更新才能使用的解决方案
  20. Qt 基恩士PLC EtherNet/IP 单元上位链路通信功能TCP实现

热门文章

  1. Upgrading to MySQL 5.7---focusing on temporal types
  2. vue设置路由登录权限
  3. 倍福TwinCAT(贝福Beckhoff)基础教程5.1 TwinCAT-4 获取本机名称和网卡名称
  4. 快、狠、准排查各类系统故障的运维套路
  5. Linux系统编程—进程—system函数
  6. docker swarm搭建Redis哨兵(Sentinel)模式
  7. Oracle bulk 示例
  8. 快速了解常用的非对称加密算法,再也不用担心面试官的刨根问底
  9. MASA MAUI Plugin 安卓蓝牙低功耗(一)蓝牙扫描
  10. ublock origin_Chrome可能会在打破uBlock起源的同时更快地阻止广告