多个窗口的数据由一个静态的类管理,
当一个窗口的数据变化时,通知这个静态管理类,
再由这个静态管理类通知各个窗口更新数据我现在用一个代理事件,在各个窗口中注册这个代理事件,
但是改变数据的窗口以外的窗口数据传丢了。不知道哪位做过类似的代码,指导下啊

解决方案 »

  1.   

    仅作参考
        public class Test
        {
            public delegate void PosterHandle(object data);        private static List<PosterHandle> posterList = new List<PosterHandle>();        public static void SignIn(PosterHandle poster)
            {
                if (!posterList.Contains(poster))
                {
                    posterList.Add(poster);
                }
            }        public static void SignOut(PosterHandle poster)
            {
                posterList.Remove(poster);
            }        //执行现有注册的委托
            public static void DoData(object data)
            {
                foreach (PosterHandle poster in posterList)
                {
                    poster(data);
                }
            }
        }    public class TestForm1 : Form
        {
            private Test.PosterHandle poster;
            public TestForm1()
            {
                poster = new Test.PosterHandle(DoPoster);
                //注册
                Test.SignIn(poster);
            }        protected override void OnClosing(CancelEventArgs e)
            {
                base.OnClosing(e);
                //注销
                Test.SignOut(poster);
            }        private void DoPoster(object data)
            {
                //.....
            }
        }
      

  2.   

    上面那种是可扩展性很强的,下面这种是按事件来的    public class Test
        {
            public delegate void PosterHandle(object data);
            public static event PosterHandle OnPosterData;
            //执行现有注册的委托
            public static void DoData(object data)
            {
                if(OnPosterData != null) OnPosterData(data);
            }
        }    public partial class TestForm1 : Form
        {
            public TestForm1()
            {
                Test.OnPosterData += new Test.PosterHandle(Test_OnPosterData);
            }        protected override void OnClosing(CancelEventArgs e)
            {
                base.OnClosing(e);            Test.OnPosterData -= new Test.PosterHandle(Test_OnPosterData);
            }        void Test_OnPosterData(object data)
            {
                //....
            }
        }
      

  3.   

    恩,先谢谢啦,我用的第二个方法,就是我的参数是泛型List<datarow>但是其他子form收到的datarow识别不了了,都是exception,不知道为啥,查了半天没查不出来,郁闷ing~~~~