У меня есть приложение Windows Forms с одной формой и несколькими классами.Singleton: экземпляр формы возвращает null
Я хочу получить значения некоторых текстовых полей из примера 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. Singleton установить внутри класса 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;
}
Как вы можете видеть, я получаю «NullReferenceException», когда пытаюсь получить Singleton из класса Form1.
Следующие методы, которые я использовал следующие:
- Использование Windows.OpenForms [ "Form1"] Управление [ "- somecontrol--"]
- Использование Windows.ActiveForm
- . Использование паттерна Singleton Design на классе Form1
Все эти способы возвращают нуль, и я не могу думать о причине, почему она возвращается нуль.
Любая помощь будет воспринята.
Thankyou
Вы уверены, что 'form' равно null? Оператор 'as' возвращает null, если приведение не работает, и я уверен, что' form.Controls ["nonExistentasdf323"] 'также вернет' null'. – Quantic