gpt4 book ai didi

c# - 我可以将 Form 设为单例吗?

转载 作者:太空狗 更新时间:2023-10-30 01:22:08 27 4
gpt4 key购买 nike

我有一个 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();

我怎样才能做到这一点?

最佳答案

您可能会找到一种使主窗口成为单例的方法,但这不是实现您想要的结果的最佳方法,也不是使用单例模式的合适情况。

如果所有其他工具窗口/对话框都封装在主窗口中,那么用于通信的更好模式将是事件。

让内部窗口/对话框引发事件以表示对主窗口执行某些操作的“请求”。让主窗口订阅这些事件,并通过事件处理程序完成工作。

通过避免单例方法,您可以避免测试单例的困难,也可以避免大量的显式循环引用,在这种情况下,主窗口不仅引用了封装的窗口/对话框,而且它们反过来也有显式引用回到主窗口。

关于c# - 我可以将 Form 设为单例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14313646/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com