C# 从C中的子窗体调用类实例中的函数#
我相信这很简单,但我就是找不到适合谷歌的短语 我有一个应用程序,这是一个托盘应用程序 Main()函数初始化类的实例C# 从C中的子窗体调用类实例中的函数#,c#,C#,我相信这很简单,但我就是找不到适合谷歌的短语 我有一个应用程序,这是一个托盘应用程序 Main()函数初始化类的实例CustomApplicationContext: private static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new CustomApplicationConte
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()代码>这就成功了。我肯定错过了。仅供参考,你在那一行的末尾少了一个分号。再次感谢你。