Язык определяет его этот путь.
Переменные экземпляра значения по умолчанию типа объекта к тому, чтобы быть инициализированным к пустому указателю. Локальные переменные типа объекта не инициализируются по умолчанию, и это - ошибка времени компиляции для доступа к неопределенной переменной.
раздел See 4.5.5 в здесь http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5
Есть несколько решений этой проблемы, но я обычно использую именно этот шаблон.
// Form 1
// inside the button click event
using(Form2 form2 = new Form2())
{
if(form2.ShowDialog() == DialogResult.OK)
{
someControlOnForm1.Text = form2.TheValue;
}
}
И ...
// Inside Form2
// Create a public property to serve the value
public string TheValue
{
get { return someTextBoxOnForm2.Text; }
}
объявить строку в форме1 общедоступная строка TextBoxString;
в form1 событие щелчка добавить
private void button1_Click(object sender, EventArgs e)
{
Form1 newform = new Form1();
newform = this;
this.Hide();
MySecform = new Form2(ref newform);
MySecform.Show();
}
в form2 constructer
public Form2(ref Form1 form1handel)
{
firstformRef = form1handel;
InitializeComponent();
}
в form2 переменная контейнера Form1 firstformRef;
private void Submitt_Click(object sender, EventArgs e)
{
firstformRef.TextBoxString = textBox1.Text;
this.Close();
firstformRef.Show();
}
Я работал над различными проектами winform, и по мере того, как приложения становились все более сложными (больше диалогов и взаимодействий между ними), я начал использовать некоторую систему событий, чтобы помочь мне, потому что управление открывать и закрывать окна вручную будет сложно поддерживать и развивать дальше.
Я использовал CAB для своих приложений, у него есть система событий , но в вашем случае это может быть излишним :) Вы можете написать свои собственные события для более простых приложений