我想要实现这样的效果:打开F_main窗体->点击F_main里的一个按钮->用该按钮事件打开F_login->再用F_login里的一个按钮事件触发F_main里的public void show_now()方法->打开F_now窗体->点击F_now窗体中的按钮事件,改变F_main里的webbrowser属性值。
已有代码如下(调试时F_main窗体里没有任何变化): F_now窗体: 
namespace XXX
{
    public partial class F_now : Form
    {
        public event EventHandler MyEvent;        protected virtual void OnEvent(object sender, EventArgs e)
        {
            if (MyEvent != null)
                MyEvent(sender, e);
        }        public F_now()
        {
            InitializeComponent();
        }
        private void btn_s_Click(object sender, EventArgs e)
        {
            OnEvent (sender, e);         
        }    }
}
F_main窗体: 
namespace XXX

    public partial class F_main : Form 
    { 
        public F_main() 
        { 
            InitializeComponent(); 
            
        } 
    public void show_now() //该方法是显示F_now的地方,是通过其它方式能够调用的(也就是说这儿是可以执行,类似于放到Load事件里的) 
        { 
            F_now frm_now = new F_now(); 
            frm_now.MyEvent += new System.EventHandler(this.frmMain_youEvent); 
            frm_now.Show(this); 
        } 
        private void frmMain_youEvent(object sender, EventArgs e) 
        { 
            this.wbb_list.Navigate("http://www.sina.com"); 
        } 
  } 
}上面的代码如何在两个窗体间通信则可以很正常的进行,可要实现三窗体间的通信则不能成功,为什么呢????

解决方案 »

  1.   

    没懂你什么意思?难道两次调用show_now()出来的第二个窗口不起作用?
      

  2.   

    我又试了试,在F_main中的确收到了来自F_now传来的值(或者说监听到了事件,并执行了事件),但是并不是在原来的的F_main中,而是生成了另一个F_main,并且必须要加一个show()才能看到。
    也就是将这段代码:
    private void frmMain_youEvent(object sender, EventArgs e) 
            { 
                this.wbb_list.Navigate("http://www.sina.com"); 
            } 
    改成:
    private void frmMain_youEvent(object sender, EventArgs e) 
            {
                this.wbb_list.Navigate("http://www.sina.com.cn");
                [color=#FF0000]this.Show();[/color]
            } 但这样的话就多出了一个窗口,我不想这样!