本人想在form2的formcolsed的事件中加入以下代码, 以达到关闭form2时刷新form1中listbox的数据,可是刷新不了,求各位高手指出刚开始学小弟的错误,感激不尽~~
Form1 f1 = new Form1();
f1.lxnameTableAdapter.Fill(f1.csmediaDataSet.lxname);
f1.listBox1.Refresh();
Form1 f1 = new Form1();
f1.lxnameTableAdapter.Fill(f1.csmediaDataSet.lxname);
f1.listBox1.Refresh();
解决方案
1
可以用委托实现form2关闭时, 通知FORM1的listbox刷新
1
按照你的思路,你需要将Form1的窗口对象输入 到Form2中,在关闭Form2窗口时,调用Form1对应的处理函数。
5
你也可以利用Form1中,if (Form2.ShowDialog() != DialogResult.OK)
{
刷新控件
}
{
刷新控件
}
1
原因就是:Form1 f1 = new Form1();,现在的f1是新new出来的,已经不是以前那个对象了,你应该先隐藏以前那个form1,而不是关闭
1
form2的构造函数中,把form1.listbox 传过来。
1
10
首先,在Form2中定义一个事件.
public class RefreshEventArgs : EventArgs { public string S { get; set; }//这里定义你要从Form2传到Form1的数据 } public delegate void RefreshEventHandler(object sender, RefreshEventArgs e); public event RefreshEventHandler RefreshEvent; protected void OnRefresh(RefreshEventArgs e) { RefreshEventHandler handler = RefreshEvent; if (handler != null) { handler(this, e); } }
然后,在Form2的Closed事件中触发刚才定义的事件
private void Form2_FormClosed(object sender, FormClosedEventArgs e) { RefreshEventArgs eventArgs = new RefreshEventArgs() { S = "abc" };//这里根据之前的定义,对数据进行赋值 OnRefresh(eventArgs); }
最后,在Form1中注册事件,并写出相应的事件处理方法
private void Form1_Load(object sender, EventArgs e) { Form2 frm2 = new Form2(); frm2.RefreshEvent += new Form2.RefreshEventHandler(RefreshLstBox); frm2.Show(); } private void RefreshLstBox(object sender, Form2.RefreshEventArgs e) { textBox1.Text = e.S; }
手打的代码,可能有错..本人改一下