【发布时间】:2013-01-14 05:23:31
【问题描述】:
我有一个 Visual C# 2010 应用程序,它有一个名为 MainWnd 的主窗体以及其他工具窗口和对话框。我希望其他工具窗口能够与主窗体“对话”,并调用其方法。但这需要MainWnd 的实例,并且由于在任何给定时间只会创建其中一个表单,因此我没有理由枚举MainWnd 的所有实例或查找第一个实例。所以我希望我的主申请表MainWnd 是一个单例,以便其他窗口可以轻松地从中调用代码。
这里是我想做一个单例的主窗体的代码:
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace MyLittleApp
{
public partial class MainWnd : Form
{
public MainWnd()
{
InitializeComponent();
}
public void SayHello()
{
MessageBox.Show("Hello World!");
// In reality, code that manipulates controls on the form
// would go here. So this method cannot simply be made static.
}
}
}
我希望能够通过另一种形式调用SayHello(),只需编写:
MainWnd.SayHello();
我怎样才能做到这一点?
【问题讨论】:
-
你不能把它作为一个静态公共方法然后按你说的做吗?
-
因为它被称为 MainWnd 我希望该表单打开其他表单。在这种情况下,您可以在子表单上使用一个事件,并从那里的 MainWnd 注册一个事件接收器。
-
@ryadavilli 正如我发布的代码中的评论所说,该方法操作表单中的对象,因此它必须有一个实例,因此它不能只是静态的。