StatusManager Control App with file
(How to interact between app and configuration file?)
1. Configuration file
<?xml version="1.0" encoding="utf-8" ?> <StatusTexts> <StatusText>I'm working</StatusText> <StatusText>I'm watching TV</StatusText> <StatusText>I'm having lunch</StatusText> </StatusTexts>
2. App
3. Code
class StatusManager { //定义BindingList是为了和控件绑定 public BindingList<string> statusTexts; public StatusManager() { var statusSettings = XElement.Load("status.xml").Elements("StatusText"); statusTexts = new BindingList<string>(statusSettings.Select(item => item.Value).ToList()); statusTexts.ListChanged += new ListChangedEventHandler(statusTexts_ListChanged); } // 当StatusTexts发生变化,保存到文件 private void statusTexts_ListChanged(object sender, ListChangedEventArgs e) { XElement node = new XElement("StatusTexts", statusTexts.Select( item => new XElement( "StatusText", item))); node.Save("status.xml"); } }
public partial class Form1 : Form { public Form1() { InitializeComponent(); } Action m_OKAction; // Action类型委托,在点击OK按钮后激发 BindingList<string> m_statusList; // 再定义一个变量 是为了跟踪改变 private void Form1_Load(object sender, EventArgs e) { StatusManager sm = new StatusManager(); // 和变量绑定,因为是BindList,所以m_statusList变化,sm.statusTexts也变化, // 因此触发statusTexts_ListChanged,保存到文件 m_statusList = sm.statusTexts; statusComBox.DataSource = m_statusList; // 和Combox绑定 statusListBox.DataSource = m_statusList; // 和ListView绑定 } private void ShowControls() { statusBox.Visible = okBtn.Visible = button3.Visible = true; } private void addBtn_Click(object sender, EventArgs e) { ShowControls(); statusBox.Text = string.Empty; m_OKAction = () => { string status = statusBox.Text; if (!string.IsNullOrEmpty(statusBox.Text)) { m_statusList.Add(status); } }; } private void modifyBtn_Click(object sender, EventArgs e) { ShowControls(); statusBox.Text = statusListBox.SelectedItem.ToString(); m_OKAction = () => { string status = statusBox.Text; if (!string.IsNullOrEmpty(statusBox.Text)) { m_statusList[statusListBox.SelectedIndex] = status; } }; } private void removeBtn_Click(object sender, EventArgs e) { m_statusList.Remove(statusListBox.SelectedItem.ToString()); } private void okBtn_Click(object sender, EventArgs e) { if (m_OKAction != null) { m_OKAction(); } } }示例下载:/Files/DylanWind/StatusManager.zip
作者:DylanWind
出处:http://www.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。