一个简易的便签工具:探索窗体之间传值和传引用的方法
时间:2014-05-12 17:09:08
收藏:0
阅读:1093
简单的便签工具:实现了基于文本的便签信息的浏览,删除,添加。可以查看时间,实时更新数据。
这个便签工具完全基于面向对象的编程方式,首先定义Note类,然后使用NoteManager类进行便签的管理。其中的关键就是在NoteManager类中定义list<Note>泛型集合。原理上和ArrayList基本是一致的。
NoteManager的工作原理:
public List<Note> list;//定义一个泛型集合,并在构造函数中初始化。
private int CurrentIndex = 0;//指示当前便签所在位置
public Note GetCurrentNote; //一个只读属性,读取当前索引下的Note对象
public bool AddNewNote(Note note); //方法,想list<Note>中添加新的Note对象
public int Move(int direc, Label lblTip); //方法,根据参数是-1还是1,移动CurrentIndex,达到翻页效果
//文件:NoteManager.cs
//作者:Me
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace 简易便签 { class NoteManager { public List<Note> list; private int CurrentIndex = 0; public Note GetCurrentNote { get { return list[CurrentIndex]; } } //新增一个Note public bool AddNewNote(Note note) { //设置id note.Id = list.Count+1; list.Add(note); return true; } public NoteManager() { list = new List<Note>(); } //diec只能是-1或者1 // 0 1 2 3 4 length=5 //返回当前的CurrentIndex public int Move(int direc, Label lblTip) { //每移动一次,清空lblTip lblTip.Text = ""; if (direc == -1) { CurrentIndex --; if (CurrentIndex == -1) { CurrentIndex = 0; lblTip.Text = "已是第一张!"; } } if (direc == 1) { CurrentIndex ++; if (CurrentIndex == list.Count) { CurrentIndex = list.Count - 1; lblTip.Text = "已是最后一张!"; } } return CurrentIndex; } } }
而在Note.cs类中则定义了便签的基本属性:
//文件:Note.cs
//作者:Me
namespace 简易便签 { class Note { public int Id { get; set; } public string Title { get; set; } public string Content { get; set; } public DateTime Time { get; set; } } }
窗体文件:frmAddNewNote.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace 简易便签 { public partial class frmAddNewNote : Form { public frmAddNewNote() { InitializeComponent(); } private void btnOK_Click(object sender, EventArgs e) { //manager.AddNewNote(new Note { Title=txtTitle.Text, Content=txtContent.Text, Time=DateTime.Now}); NoteManager manager = Record.manager; manager.AddNewNote(new Note { Title = txtTitle.Text, Content = txtContent.Text, Time = DateTime.Now }); MessageBox.Show("添加成功!"); this.Close(); } } }
窗体文件:frmMain.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace 简易便签 { public partial class Form1 : Form { public Form1() { InitializeComponent(); manger = new NoteManager(); } private NoteManager manger; private string[] allLines; private void Form1_Load(object sender, EventArgs e) { skinEngine1.SkinFile = "Silver.ssk"; allLines = File.ReadAllLines("Note.txt", Encoding.Default); foreach (string item in allLines) { string[] eachArray = item.Split(‘|‘); manger.list.Add(new Note { Id=Convert.ToInt32(eachArray[0]), Title=eachArray[1], Content=eachArray[2], Time=Convert.ToDateTime(eachArray[3]) }); } //窗体加载完成之后马上给值 WriteContent(); lblPage.Text = "1/" + manger.list.Count; } private void btnPrev_Click(object sender, EventArgs e) { //向前 int currentPost = manger.Move(-1, lblTip) + 1; lblPage.Text = currentPost.ToString() + "/"+ manger.list.Count; WriteContent(); } private void btnNext_Click(object sender, EventArgs e) { //向后 int currentPost = manger.Move(1, lblTip) + 1; lblPage.Text = currentPost.ToString() + "/" + manger.list.Count; WriteContent(); } private void WriteContent() { Note tempNote = manger.GetCurrentNote; txtTitle.Text = tempNote.Title; txtContent.Text = tempNote.Content; lblDateTime.Text = tempNote.Time.ToString(); //取消文本选中 txtTitle.Select(0,0); //标题获得焦点 txtTitle.Focus(); } private void ClearAllText() { txtTitle.Text = ""; txtContent.Text = ""; lblDateTime.Text = ""; lblTip.Text = ""; } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { //这里必须和File.ReadAllLines()具有相同的编码,否则肯定乱码 List<string> strArr = new List<string>(); foreach (Note item in manger.list) { strArr.Add(item.Id+"|"+item.Title+"|"+item.Content+"|"+item.Time); } File.WriteAllLines("Note.txt", strArr, Encoding.Default); } private void TsBtnAddNew_Click(object sender, EventArgs e) { //manger.AddNewNote(new Note { Title=txtTitle.Text, Content=txtContent.Text, Time=DateTime.Now}); //frmAddNewNote fan = new frmAddNewNote(); //fan.SetNoteManage(manger); //fan.ShowDialog(); frmAddNewNote fa = new frmAddNewNote(); Record.manager = manger; fa.Show(); } private void TsBtnClear_Click(object sender, EventArgs e) { ClearAllText(); } private void TsTool_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { } private void TsBtnUpdate_Click(object sender, EventArgs e) { manger.AddNewNote(new Note { Title = txtTitle.Text, Content = txtContent.Text, Time = DateTime.Now }); lblTip.Text = "已经更新!"; } } }
这个小案例中有两点要特别关注:
1.首先是面向对象的思维方式,将每个Note便签都看做一个对象,对象里有各种属性。通过NoteManager对象管理Note对象。达到了指挥者的效果
2.其次便是窗体之间的传值,我这里使用的是构建中间件static class Record类,进行引用的传递
中间件:
static class Record { public static NoteManager manager; }
使用中间件进行数据的共享很方便。
程序源码: 下载
评论(0)