2014-01-05 4 views
0

У меня есть 2 формы.Передача значений из одной формы в другую в C#

я что-то неправильно, когда я прохожу текст из формы 2 с образованием 1.

Мой TextBox2 из формы 2 не меняется в моей начальной Form1 (созданы еще Form1), когда я нажимаю на кнопку, как могу я решить его? Я хочу иметь только 2 формы, не более того.

Form1

Form2

Код:

public partial class Form1 : Form 
{ 
    private string vas; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    public string backsend 
    { 
     get { return vas; } 
     set {vas = value; } 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 f2 = new Form2(); 
     f2.passValue = textBox1.Text; 
     f2.Show(); 
    } 
} 

public partial class Form2 : Form 
{ 
    private string Mn; 

    public string passValue 
    { 
     get { return Mn; } 
     set { Mn = value; } 
    } 

    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void Form2_Load(object sender, EventArgs e) 
    { 
     textBox2.Text = Mn; 
    } 

    private void button2_Click(object sender, EventArgs e) 
    {//click for clear textbox1 from form 2. 
     textBox2.Clear(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form1 f1 = new Form1(); i don't understand why is created another form,but not variable 
     f1.backsend = textBox2.Text; 
     f1.textBox2.Text = f1.backsend; //no exchange in my first form 1 
     MessageBox.Show(f1.textBox2.Text);//it's correct 
    } 
} 
+0

Вы не измените 'backsend' недвижимость где-нибудь в' Form1' так почему вы ожидаете его изменения? – BartoszKP

+0

проверить это http://stackoverflow.com/questions/1559770/send-values-from-one-form-to-another-form-in-c-sharp-winforms-application –

+0

извините, я не понимаю, что вы сказали , пожалуйста, подробнее ... – user3142035

ответ

1

Вы уже обнаружили ошибку, линия

Form1 f1 = новый Form1(); я не понимаю, почему создается другая форма, но не переменная

Это создает новый экземпляр класса Form1, который вы не указали нигде и не хотите. Что вы хотите сделать, это изменить значение в уже созданной и отображаемой форме. Вы можете сделать это, передав ссылку на свой экземпляр Form1 на ваш f2.

Изменить этот код

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 f2 = new Form2(); 
    f2.passValue = textBox1.Text; 
    f2.Show(); 
} 

в

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 f2 = new Form2(); 
    f2.initatorForm = this; 
    f2.passValue = textBox1.Text; 
    f2.Show(); 
} 

и добавить соответствующее свойство для initatorForm или вы можете просто использовать .Parent в вашем Form2, так как родитель должен быть форма, которую вы использовали, чтобы показать но я не на это 100%.

Кроме того, таким образом, вы сделали только изменение переменной vas, но не значение текстового поля. Вы можете добавить это к установщику, если хотите.

0

Я думаю, что этот пример помог вам:

Этот пример будет использовать строку ввода из Form1 в Form2:

public partial class Form1 : Form 
{ 
    private string vas; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    public string Test { get;set; } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Test = textBox1.Text; 
     Form2 f2 = new Form2(this); 
     f2.Show(); 
    } 
} 

public partial class Form2 : Form 
{ 
    private Form1 form1; 

    public Form2(Form1 parentForm) 
    { 
     InitializeComponent(); 
     form1 = parentForm; 
    } 

    private void Form2_Load(object sender, EventArgs e) 
    { 
     //you can use the public string from Form1 here like this: 
     textBox1.Text = form1.Test; 
    } 
} 
+0

Большое спасибо, я сделал несколько обмен в вашем коде, и это помогло мне. – user3142035

+0

Вы можете отметить это как ответ, если это вам помогло. – jomsk1e

+0

У меня достаточно репутации – user3142035

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