我用c#作东西时在窗体2设计拉一个checkedlistbox列表!并且是可以随时添加数据!我在窗体4要调用这个控件!并且当空间在窗体2更新信息是调用的也要自动同步更新要怎么办呢?

解决方案 »

  1.   

    我的form4里面要调用form2的checkedlistbox,而且当form2的
    checklistbox中加入新的端口在form4中的checkedlistbox也要同步自动更新!要怎么办啊
      

  2.   

    两窗体同时打开状态用委托可以实现
    只有一个窗体处于打开状态可以将checklistbox列表数据保存,打开另一窗体时加载
      

  3.   

    用Delegate或者使用事件机制(其实两者原理一样)。
      

  4.   

    使用Delegate或者事件(其实两者实现的原理是一样的)。
      

  5.   

    使用委托,用ref或者out传递引用。
      

  6.   

    最简单的方法,你弄个静态类。
    把所有需要全局共享的东西就扔到这个静态类里面去。public static class Keeper{
      public static Form1 form1;//Form1创建之后放这里
      public static Form2 form2;//Form2创建之后放这里
      ……
    }这样,你Form1变化的时候,如果希望Form3也变化,就去Keeper拿到Form3的引用,然后想干嘛就干嘛。
    比如这个例子,你Form4想用Form2,你就Keeper.form2就拿到form2了啊,你想怎样就怎样。当然还有其他你想共享的东西就可以放在里面。Form们不必要知道彼此,只需要知道向Keeper要就行了。不知道我这么说你明白没? 具体的代码还要靠你自己去润色。
      

  7.   

    public class Form1{ 
       public Form1(){
          if( Keeper.form1 == null )  Keeper.form1 = this;//构造的时候就把自己交给Keeper!
       }
       public void Update(){
         /* 做了一些更新 */
         //…
         // 我更新的时候希望form2也更新
         Keeper.form2.Update();   }
    }public class Form2{
       public Form2(){
         if( Keeper.form2 == null ) Keeper.form2 = this;
       }
       public void Update()
       {
           //更新
       }
    }
      

  8.   

    from难道不是对象?一个对象的内容改变了 去通知另外一个对象就这么简单
      

  9.   

    使用委托,用ref或者out传递引用。
    正解!
      

  10.   

    我觉得,在Form2中,把这个checkedlistbox定义为一个只读的属性,在Form4中,得到Form2的引用就可以了。
    因为每次读这个属性的时候,都会回到Form2中是读取的。如果想更简单一点儿,这个控件和属性声明成静态的,就连引用也不需要了。不过,运行的流程要控制好,防止未实例化之类的错误就可以了。
      

  11.   

    checkedlistbox list = (checkedlistbox)Application.OpenForms["Form2"]
    .Controls["checkedlistbox1"];
      

  12.   

    Keeper类随便放在那里都可以。右键添加类就行了。