在编写winform项目中经常遇到模式窗口来编辑数据然后主窗体进行数据更新,以前都是通过传递窗体实例来更新数据,后来发现这种方法挺麻烦的,如果多个窗体调用编辑窗口需要写多个结构函数。后来发现可以使用事件机制来更新数据,于是写了个小例子。
在program类中添加一个静态字段,来做为listview的数据源
private static List<string> _aalist = new List<string>();
public static List<string> aaList
{
get { return _aalist; }
set { _aalist = value; }
}
场景:新建一个主窗体Form2,在主窗体上放一个listview控件,只添加一个列即可,然后加一个button按钮。在窗体类中定义一个事件函数
public void Form2_onlistchange(object sender, EventArgs e)
{
getdata();
}
getdata为定义的一个绑定数据的函数
public void getdata()
{
listView1.Items.Clear();
ListViewItem item;
foreach (string a in Program.aaList)
{
item = new ListViewItem();
item.Text = a;
listView1.Items.Add(item);
}
}
然后定义button的事件
private void button1_Click(object sender, EventArgs e)
{
Form3 f3 = new Form3();
f3.dowork += new EventHandler(Form2_onlistchange);
f3.ShowDialog();
}
然后新建一个子窗口Form3,在界面中放一个textbox和一个button
在窗体中定义一个事件的方法,
public event EventHandler dowork;
给这个button定义事件
private void button1_Click(object sender, EventArgs e)
{
string aa = textBox1.Text;
Program.aaList.Add(aa);
if (dowork != null)
{
dowork(sender, e);
}
}
做好的效果图:
这样做的好处就是不需要在子窗体中关系主窗体的问题,只需要在子窗体中定义好子窗体的事件即可。