有一个页面,上面有两个PlaceHolder控件,然后通过动代加载两个UserControl,我现在想让两个UserControl进行通信(比如:我点击control1的时候触发control2上的某个事件).该如何做.

解决方案 »

  1.   

    耦合比较松散的一个方法是,control1应该呈示一个event,当点击control1时触发这个事件,把页面作为中介人,把control2里的方法连接到这个事件,假如control2里的方法的signature与control1事件的signature相仿的话,可以这么做Control1 c1 = (Control1)LoadControl("usercontrol1");
    PlaceHolder1.Controls.Add(c1);Control2 c2 = (Control2)LoadControl("usercontrol2");
    PlaceHolder2.Controls.Add(c2);c1.Event1 += new EventHandler(c2.Method2);否则的话,你需要写个单独的方法或用.NET 2.0里的匿名方法连接这事件与方法
      

  2.   

    在UserControl里创建一个可重载的方法,在调用时重载,改写其行为可参考设计模式中的抽象工厂模式
      

  3.   

    嘿嘿,saucer(思归)不愧是老大,这样做还真不错,正交性非常好,又学了一招
      

  4.   

    我也想了一个办法,利用Observer模式,一个control实现IObserver,另一个实现IObservable.
    在页面OnInit的时候,添加Observer.和事件异曲同工.