Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Создайте свойство (или метод) на FormOptions
, скажите GetMyResult
:
using (FormOptions formOptions = new FormOptions())
{
formOptions.ShowDialog();
string result = formOptions.GetMyResult;
// do what ever with result...
}
, Если Вы просто используете formOptions, чтобы выбрать единственное значение и затем закрыться, предложение Mitch является хорошим способом пойти . Мой пример здесь использовался бы при необходимости в ребенке для передачи назад с родителем, оставаясь открытыми.
В Вашей родительской форме, добавьте открытый метод, который дочерняя форма назовет, такой как
public void NotifyMe(string s)
{
// Do whatever you need to do with the string
}
Затем, когда необходимо будет запустить дочернее окно от родителя, используйте этот код:
using (FormOptions formOptions = new FormOptions())
{
// passing this in ShowDialog will set the .Owner
// property of the child form
formOptions.ShowDialog(this);
}
В дочерней форме, используйте этот код для пасования назад значения к родителю:
ParentForm parent = (ParentForm)this.Owner;
parent.NotifyMe("whatever");
код в этом примере лучше использовался бы для чего-то как окно панели инструментов, которое предназначается для плавания выше основной формы. В этом случае Вы открыли бы дочернюю форму (с.TopMost = верный) использующий.Show () вместо.ShowDialog ().
дизайн А как это означает, что дочерняя форма сильно связывается к родительской форме (так как ребенок должен снять ее владельца в качестве ParentForm для вызова ее метода NotifyMe). Однако это не автоматически плохая вещь.
Можно также создать общественную собственность.
// Using and namespace...
public partial class FormOptions : Form
{
private string _MyString; // Use this
public string MyString { // in
get { return _MyString; } // .NET
} // 2.0
public string MyString { get; } // In .NET 3.0 or newer
// The rest of the form code
}
Тогда можно получить его с:
FormOptions formOptions = new FormOptions();
formOptions.ShowDialog();
string myString = formOptions.MyString;
Можно также создать перегрузку ShowDialog в дочернем классе, который добирается параметр, который возвращает Вас результат.
public partial class FormOptions : Form
{
public DialogResult ShowDialog(out string result)
{
DialogResult dialogResult = base.ShowDialog();
result = m_Result;
return dialogResult;
}
}
Используйте общественную собственность дочерней формы
frmOptions {
public string Result; }
frmMain {
frmOptions.ShowDialog(); string r = frmOptions.Result; }
события Use
frmMain {
frmOptions.OnResult += new ResultEventHandler(frmMain.frmOptions_Resukt);
frmOptions.ShowDialog(); }
общественная собственность Использования основной формы
frmOptions {
public frmMain MainForm; MainForm.Result = "result"; }
frmMain {
public string Result;
frmOptions.MainForm = this;
frmOptions.ShowDialog();
string r = this.Result; }
Управление объектом Использования. Тег; Это характерно для всей общественной собственности средств управления, которая может содержать Систему. Объект. Можно держать там строку или MyClass или MainForm - что-либо!
frmOptions {
this.Tag = "result": }
frmMain {
frmOptions.ShowDialog();
string r = frmOptions.Tag as string; }
Многими способами освежевать кошку здесь и предложение @Mitch является хороший путь. Если Вы хотите, чтобы клиентская форма имела больше 'контроля', можно хотеть передать экземпляр родителя ребенку, когда создано, и затем можно назвать любой общедоступный родительский метод на ребенке.
Я думаю, что самый легкий путь состоит в том, чтобы использовать Свойство тегов в Вашем классе FormOptions, устанавливает Тег =, оценивают Вас, должен передать и после того, как метод ShowDialog считал его как
myvalue x=(myvalue)formoptions.Tag;