gpt4 book ai didi

c# - Windows 窗体、设计器和单例

转载 作者:太空宇宙 更新时间:2023-11-03 21:46:56 32 4
gpt4 key购买 nike

我正在尝试使用 Windows 窗体和用户控件,但到目前为止,这只是令人头疼的事情。我不能将窗体或控件设为静态,因为设计者不喜欢那样,而且当我在窗体和控件上使用 Singleton 时,设计者仍然向我抛出错误。

我的 FormMain:

public partial class FormMain : Form
{
private static FormMain inst;

public static FormMain Instance
{
get
{
if (inst == null || inst.IsDisposed)
inst = new FormMain();
return inst;
}
}

private FormMain()
{
inst = this;
InitializeComponent();
}

主屏幕.cs:

public partial class MainScreen : UserControl
{
private static MainScreen inst;

public static MainScreen Instance
{
get
{
if (inst == null || inst.IsDisposed)
inst = new MainScreen();
return inst;
}
}

private MainScreen()
{
inst = this;
InitializeComponent();
}

如果 MainScreen 的构造函数是公共(public)的,则程序运行,但是当我将其更改为私有(private)时,我现在在 FormMain.Designer.cs 中收到错误消息,提示“'Adventurers_of_Wintercrest.UserControls.MainScreen.MainScreen()' is unaccessible due to its防护等级”。它指向这一行:

        this.controlMainScreen = new Adventurers_of_Wintercrest.UserControls.MainScreen();

我认为这是设计者默认制作的类的实例。我应该放弃设计师吗?或者有办法解决这个问题吗?或者是否有另一种方法可以在不使用 Singleton 的情况下访问类属性(因为我似乎无法使表单或控件静态化)?任何帮助将不胜感激。

最佳答案

如果要访问实例化表单的公共(public)属性,则需要保留对每个表单的每个实例的引用。

一种方法是为每种类型的表单创建一个带有静态变量的类:

class FormReferenceHolder
{
public static Form1 form1;
public static Form2 form2;
}

这样您就可以在实例化表单时设置静态变量,然后您可以从程序中的任何地方访问该变量。您可以更进一步,使用设置表单的属性(如果表单尚不存在):

class FormReferenceHolder
{
private static Form1 form1;
public static Form1 Form1
{
get
{
if (form1 == null) form1 = new Form1();
return form1 ;
}
}
}

...

static void Main()
{
Application.Run(FormReferenceHolder.Form1 );
}

关于c# - Windows 窗体、设计器和单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16486614/

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