C# 从C中的子窗体调用类实例中的函数#

C# 从C中的子窗体调用类实例中的函数#,c#,C#,我相信这很简单,但我就是找不到适合谷歌的短语 我有一个应用程序,这是一个托盘应用程序 Main()函数初始化类的实例CustomApplicationContext: private static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new CustomApplicationConte

我相信这很简单,但我就是找不到适合谷歌的短语

我有一个应用程序,这是一个托盘应用程序

Main()函数初始化类的实例
CustomApplicationContext

 private static void Main()
{
  Application.EnableVisualStyles();
  Application.SetCompatibleTextRenderingDefault(false);
  Application.Run(new CustomApplicationContext());
}
在这个类中,我有一个函数:

public void DoRestart()
{

  if (_DoRestartDialog == null)
  {
    using (_DoRestartDialog = new RestartDialog())
      _DoRestartDialog.ShowDialog();
      _DoRestartDialog = null;
  }
  else
    _DoRestartDialog.Activate();
}
我在这个类中还有一个打开表单的函数:

protected override void OnTrayIconDoubleClick(MouseEventArgs e)
{
  if (e.Button == MouseButtons.Left)
  {
            if (_InfoDialog == null)
            {
                using (_InfoDialog = new InfoDialog())
                    _InfoDialog.ShowDialog();
                _InfoDialog = null;
            }
            else
                _InfoDialog.Activate();
           
  }

  base.OnTrayIconDoubleClick(e);
}

表单中有一个按钮。单击按钮时,我想调用主类中的DoRestart函数。如何引用此函数?我似乎无法从表单中访问它。

与其将实例直接传递给
Run()
,不如先将其存储在类级别:

public static CustomApplicationContext App;

private static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    App = new CustomApplicationContext();
    Application.Run(App);
}
现在,您可以通过以下方式访问它:

Program.App.DoRestart();

您可以在InfoDialog表单的参数化构造函数中传递对
this
的引用。最好通过构造函数将类的实例传递给表单。为什么这样做:
\u DoRestartDialog=null
?@Flydog57这是我下载的代码。所以,你的猜测可能和我的一样好。但是,我的理解是,这是一种防止从托盘图标打开多个对话框的机制,在对话框关闭后,需要将其设置为null,以便if语句下次执行代码。我如何说明创建新实例的原因。我收到错误:
对象引用未设置为对象的实例。
-感谢更新您的代码以显示您所做的工作,我们可以进行故障排除。我已更新到您在此处显示的内容。它确实允许我在表单中引用Program.App.DoRestart()。但是它在“Application.Run(App)”-Null object处抱怨,然后您错过了它正上方的一行:
App=new CustomApplicationContext()这就成功了。我肯定错过了。仅供参考,你在那一行的末尾少了一个分号。再次感谢你。