B窗体是嵌入在A窗体的Pannel1上的。
点击B窗体一个按钮,可以调用A窗体的某一个事件。
我已经试过的方法,不能解决问题:
(1)回调的方法,会出现多次回调,行不通
(2)B窗体向A窗体传值,因为是嵌入,不是ShowDialog(),结果无法传值给A窗体。
请问有什么好的方法没有
点击B窗体一个按钮,可以调用A窗体的某一个事件。
我已经试过的方法,不能解决问题:
(1)回调的方法,会出现多次回调,行不通
(2)B窗体向A窗体传值,因为是嵌入,不是ShowDialog(),结果无法传值给A窗体。
请问有什么好的方法没有
不过,子窗体的Parent已经是form1的Panel了,所以在子窗体里:this.Parent.Parent 就是form1.
参考:【窗体1】 public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
var form2 = new Form2();
form2.TopLevel = false;
this.panel1.Controls.Add(form2);
form2.Show();
}
}【子窗体】
下面代码演示在子窗体里按下按钮,修改父窗体的Label1显示:"form2 click"public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
var form1 = this.Parent.Parent;
form1.Controls["label1"].Text = "form2 click";
}
}
BTW:要想引用到父窗体方法还有很多,用 Application.OpenForms["form1"] 等等。
click事件如何写
btn.PerformClick();
直接用对应 button 的 PerformClick ,上面不是吗?
把a的那个事件设为public
访问的时候
aa=b.owner as a;
就可以当方法引用了
public delegate void BTNClick(object sender, EventArgs e); public BTNClick m_BTNClick; public FormB()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
if (m_BTNClick != null)
{
m_BTNClick(sender, e);
}
}
public void ShowFormB()
{
FormB fb = new FormB();
fb.m_BTNClick += new FormB.BTNClick(button1_Click); //button1_Click FormA的Click事件
fb.ShowDialog();
}