2

我正在尝试从 C# 中的第二种形式回调,但是没有做到,有人可以帮忙吗?

    // Form 1 (Main form)
    public void CallBack()
    {
         if (radioBox1.Checked)
         {
              RefreshForm("TRUE");
         }
         else if (radioBox2.Checked)
         {
              RefreshForm("FALSE");
         }
    }

    private void RefreshForm(string Options)
    {
         // Do something here
    }

现在是第二种形式

    // Form 2 (Child Form)
    Form1 form1 = new form1();
    private void timer1_Tick(object sender, EventArgs e)
    {
          form1.CallBack();
    }

可悲的是,回调不起作用,有什么我写错了吗?请帮助...非常感谢!

4

3 回答 3

2

它不起作用,因为您正在调用刚刚创建CallBack的新实例,Form1该实例与主窗体不同。

您需要以某种方式引用主表单,例如:

(Application.OpenForms[0] as Form1).CallBack();

这是假设主窗体 (Form1) 是您的应用程序的第一个打开的窗口。

于 2013-03-07T11:41:47.010 回答
0

在方法中写下一个消息框CallBack(),它会一直显示。

在 Form1 的新实例上,既不检查radioBox1radioBox2也不检查,所以调用到CallbackMethod 但什么也没发生。

于 2013-03-07T11:40:45.717 回答
0

callback方法正在调用new instanceForm1而不是您需要的方法。

由于您使用的是 MDI 接口,您可以将方法更新为:

private void timer1_Tick(object sender, EventArgs e)
{
      (this.MdiParent as Form1).CallBack();
}
于 2013-03-07T11:43:14.407 回答