本人想在form2关闭时刷新form1的listbox的数据,该怎么改呢

.Net技术 码拜 9年前 (2016-03-01) 732次浏览
 本人想在form2的formcolsed的事件中加入以下代码,  以达到关闭form2时刷新form1中listbox的数据,可是刷新不了,求各位高手指出刚开始学小弟的错误,感激不尽~~
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;
        }

手打的代码,可能有错..本人改一下


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明本人想在form2关闭时刷新form1的listbox的数据,该怎么改呢
喜欢 (0)
[1034331897@qq.com]
分享 (0)