2014-11-20 6 views
0

Я хочу знать, как я могу отправлять переменные из Form2 в Form1. У меня есть одно текстовое поле и кнопка в Form1 и одно текстовое поле и кнопка в Form2. Мое приложение начинается с Form1, textbox1 пуст и при нажатии кнопки Form2 появится. В Form2 я хочу написать номер и нажав на кнопку отправить его в текстовое поле Form1.Отправка переменных из Form2 в Form1

Я пытался этот код, но я не знаю, как его решить.

Form1 код:

public static int number; 
public Form1() 
{ 
    InitializeComponent(); 
} 
private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 form = new Form2(); 
    form.Show(); 
} 

Form2 код

public Form2() 
{ 
    InitializeComponent(); 
} 
private void button1_Click(object sender, EventArgs e) 
{ 
    Form1.number = textBox1.Text; 
    this.Visible = false; 
} 

Теперь у меня есть переменная называется число в Form1, которая содержит значение Form2 Textbox, верно? Но как я могу сказать: textbox1.text (Form1) = номер после этого действия? Нужно ли мне как-то обновить Form1?

Спасибо!

ответ

1

Я бы сказал, что хороший легкий способ сделать такого рода вещи, это через делает публичное мероприятие:

В виде двух, добавить событие:

public partial Class Form2 
{ 
    public event Action<string> SomethingHappened; 
... 

Нам нужно уволить событий на Form2 - уведомлять абонентов:

//On Form2 
private void button1_Click(object sender, EventArgs e) 
{ 
    if(SomethingHappened != null) 
     SomethingHappened (textBox1.Text); 
} 

Затем, после создания «подписываются» родительская форма Form1 к действию на суб-форме:

Form2 form = new Form2(); 

//Here, we assign an event handler 
form.SomethingHappened += (string valueFromForm2) => 
{ 
    //Event handled on Form1 
    this.Number = valueFromForm2; 
}; 
0

Настройка звучит как диалог настроек, в котором вы не можете продолжить в Form1 до тех пор, пока Form2 не будет закрыт.

Если это так, то что-то больше похоже на его было бы уместно в Form1:

public partial class Form1 : Form 
{ 

    private int number = 411; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     this.textBox1.Enabled = false; 
     this.textBox1.Text = number.ToString(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 f2 = new Form2(this.number); 
     if (f2.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 
      this.number = f2.Number; 
      this.textBox1.Text = this.number.ToString(); 
     } 
    } 

} 

С Form2 ищет что-то вроде:

public partial class Form2 : Form 
{ 

    public Form2(int number) 
    { 
     InitializeComponent(); 
     this.textBox1.Text = number.ToString(); 
    } 

    private int number = 0; 
    public int Number 
    { 
     get { return this.number; } 
    } 

    private void btnOK_Click(object sender, EventArgs e) 
    { 
     int value; 
     if (int.TryParse(this.textBox1.Text, out value)) 
     { 
      this.number = value; 
      this.DialogResult = System.Windows.Forms.DialogResult.OK; 
     } 
     else 
     { 
      MessageBox.Show(textBox1.Text, "Invalid Integer"); 
     } 
    } 

} 
+0

Его форма не является модальным. – Servy

+0

@Servy Правильно, в описании явно не говорилось, что это было ... но автор просто, возможно, не очень хорошо описал его, или понял, что они искали. Я могу ошибаться; это было бы не в первый раз. ;) –

Смежные вопросы