我有两个窗体,一个叫F_now,另一个为F_main。
想实现这样的效果:当单击F_now中按钮后,将F_main中的webbrowser的Navigate赋值为一个新值,如“http://sina.com".
已有代码如下(调试不成功):
F_now窗体:
namespace XXX
{
public partial class F_now : Form
{
public delegate void MyDelegate();
public event MyDelegate MyEvent;
public F_now()
{
InitializeComponent();
} private void btn_s_Click(object sender, EventArgs e)
{
MyEvent();
} }
}
F_main窗体:
namespace 广告互联
{
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");
}
}
}
想实现这样的效果:当单击F_now中按钮后,将F_main中的webbrowser的Navigate赋值为一个新值,如“http://sina.com".
已有代码如下(调试不成功):
F_now窗体:
namespace XXX
{
public partial class F_now : Form
{
public delegate void MyDelegate();
public event MyDelegate MyEvent;
public F_now()
{
InitializeComponent();
} private void btn_s_Click(object sender, EventArgs e)
{
MyEvent();
} }
}
F_main窗体:
namespace 广告互联
{
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");
}
}
}
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)
{
OnMyEvent(sender,e);
}
}
或者再监听一层
frm_now.MyEvent += new System.EventHandler(this.frmMain_youEvent);
放到构造函数中关于login调用F_now,一样的,在login中定义一个事件,在login中触发。
main中也在构造函数中绑定这个事件
也就是将这段代码:
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]
} 但这样的话就多出了一个窗口,我不想这样!
namespace XXX
{
public partial class F_now : Form
{
public delegate void MyDelegate(string url);
public event MyDelegate MyEvent;
public F_now()
{
InitializeComponent();
} private void btn_s_Click(object sender, EventArgs e)
{
MyEvent("http://sina.com");
} }
}
F_main窗体:
namespace 广告互联
{
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(string url)
{
this.wbb_list.Navigate(url);
}
}
}
{
public partial class F_now : Form
{
public delegate void MyDelegate();
public event MyDelegate MyEvent;
public F_now()
{
InitializeComponent();
} private void btn_s_Click(object sender, EventArgs e)
{
MyEvent();
} }
}
F_main窗体:
namespace 广告互联
{
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()
{
this.wbb_list.Navigate("http://www.sina.com");
}
}
}
你的代码中frm_now.MyEvent += new System.EventHandler(this.frmMain_youEvent); 应该写成:frm_now.MyEvent += new F_now.MYdeletegate(this.frmMain_youEvent); 才能调试成功。
但问题依旧,依然要在frmMain_youEvent方法中加上一句this.show()才能看到更改后的webbrowser属性。而且会重新打开一个新的F_main窗口。
首先在F_main中打开F_login:
F_login frm2 = new F_login();
frm2.Show();
frm2.MdiParent = this;
然后在F_login再打开F_now:
this.Hide();
F_now frm3 = new F_now();
frm3.MdiParent = this.MdiParent;
frm3.Show();
最后在F_now里是这样控制F_main里的控件的(如Lable控件):
private void button1_Click(object sender, EventArgs e)
{
((Form1)this.MdiParent).label1.Text="abc"; }