单例:表单实例返回null

本文关键字:返回 null 实例 表单 单例 | 更新日期: 2023-09-27 18:16:28

我有一个windows窗体应用程序,只有一个窗体和几个类。

我想从Form1实例中获取一些文本框的值并提取值。

我实现这一点的第一种方式是通过使用Application.OpenForms[]数组来获得表单,但我意识到在类上使用单例Form1将更有效,因为我可以直接访问,这将是不可能使其他实例。

我是这样设置的:

1。控件类从Form1

获取控件
class Controls
{
    //Request Form1 instance
    private static Form1 form = Form1.GetInstance();
    //Sets global values for easy access with getters and null setters
    //--Variable 'form' is still null hence I get the NullReferenceException
    private TextBox employer = form.Controls["textBoxEmployerName"] as TextBox;
    private TextBox role = form.Controls["textBoxRole"] as TextBox;
    private TextBox company = form.Controls["textBoxCompanyName"] as TextBox;
    private TextBox website = form.Controls["textBoxWebsite"] as TextBox;
    private TextBox refNumber = form.Controls["textBoxRefNumber"] as TextBox;
    private TextBox reason = form.Controls["textBoxReason"] as TextBox;
    private TextBox dateListed = form.Controls["textBoxDateListed"] as TextBox;       
    private Label charLimit = form.Controls["labelCharsRemaining"] as Label;
    public TextBox Employer { get { return employer; } }
    public TextBox Role { get { return role; } }
    public TextBox Company { get { return company; } }
    public TextBox Website { get { return website; } }
    public TextBox RefNumber { get { return refNumber; } }
    public TextBox Reason { get { return reason; } }
    public TextBox DateListed { get { return dateListed; } }       
    public Label CharLimit { get { return charLimit; } }
    }
}

2。类内部的单例设置Form1

public partial class Form1 : Form
{
    private static Form1 theInstance;
    public Form1()
    {
        InitializeComponent();
    }
    //Return instance of Form1
    //--This is obviously returning null for some reason
    public static Form1 GetInstance()
    {          
            if (theInstance == null)
                theInstance = new Form1();
            return theInstance;                    
    }

当我试图从类Form1中获得单例时,您可能会看到我正在获得"NullReferenceException"。

我使用过的方法如下:

  • 使用Windows.OpenForms["Form1 "] .合肥("——somecontrol")
  • 使用Windows。ActiveForm
  • 在类Form1上使用单例设计模式

所有这些方法都返回null,我想不出为什么它返回null。

任何帮助都将是感激的。

谢谢

单例:表单实例返回null

我想从Form1实例中获得一些文本框的值并提取值。

这是你需要停下来重新思考你的方法的地方。表单代表数据的视图;然而,您的数据本身需要在模型中,一个独立于视图的单独位置。

文本框需要反映一些模型对象的状态,例如一个Person对象,它具有雇主、公司、角色、网站等字符串属性。表单将读取对象的属性,将其显示在文本框中,然后对文本框的更改做出反应,并将值保存回模型Person对象。

如果您将Person设置为单例,或者提供其他通用的访问方式,您将能够从所有表单访问person的属性,而无需访问表单本身。