B窗体是嵌入在A窗体的Pannel1上的。
点击B窗体一个按钮,可以调用A窗体的某一个事件。
我已经试过的方法,不能解决问题:
(1)回调的方法,会出现多次回调,行不通
(2)B窗体向A窗体传值,因为是嵌入,不是ShowDialog(),结果无法传值给A窗体。
请问有什么好的方法没有

解决方案 »

  1.   

    Show 的时候,把 Show(this) //this即窗体A 传入。那么A的公开属性都可以访问。
      

  2.   

    在B里用 this.Owner 访问A
      

  3.   

    呵呵,试了下,show(this) 的时候直接子窗体不显示了。
    不过,子窗体的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"] 等等。
      

  4.   

    就是你在A窗体里面的点击这个控件的时候你要在 DialogResult 的时候ShowDialog(this);这个this传至给B这样在B里面你用((Form1)this.Owner)这样你就能调用到FORM1了!
      

  5.   

    form1 上没有label1 可不null么。
      

  6.   

    谢谢楼上的大哥,请问form1.Controls["button1"]
    click事件如何写
      

  7.   

    强制转换var btn = form1.Controls["button1"] as Button;
    btn.PerformClick();
      

  8.   

    如果调用A窗体的btn_sign事件?
      

  9.   


    直接用对应 button 的 PerformClick ,上面不是吗?
      

  10.   

    b.owner=a;
    把a的那个事件设为public
    访问的时候
    aa=b.owner as a;
    就可以当方法引用了
      

  11.   

    谢谢大家:如果响应menustrip下拉菜单的事件
      

  12.   

    直接将A窗体的方法定义为Public的,B窗体事件后调用这个窗体的方法。不过此时窗体需要设置为单例的。
      

  13.   

    建议使用委托,在窗体B中建立一个委托,创建一个委托实例,然后在窗体A中创建B时,为B的委托赋值,然后直接在B中调用委托就可以了
    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();
            }
      

  14.   

    上面的第一段代码是FormB中的,第二段是FormA中的