2016-08-18 5 views
-1

Это мои 2 формы. enter image description hereПередача значений из одной формы в другую Форма нажатием кнопки

Эти коды для формы 1 ->

namespace Passing_Values 
{ 
    public partial class Form1 : Form 
    { 
     string a="preset value"; 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void btnOpenF2_Click(object sender, EventArgs e) 
     { 
      new Form2().Show(); 
     } 

     public void set(string p) 
     { 
      MessageBox.Show("This is Entered text in Form 2 " + p); 
      a = p; 
      MessageBox.Show("a=p done! and P is: " + p + "---and a is: " + a); 
      textBox1.Text = "Test 1"; 
      textBox2.Text = a; 
      textBox3.Text = p; 

     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      MessageBox.Show(a); 
     } 
    } 
} 

Данные коды для формы 2 ->

namespace Passing_Values 
{ 
    public partial class Form2 : Form 
    { 
     public Form2() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      string g; 
      g = textBox1.Text; 

      Form1 j = new Form1(); 
      j.set(g); 
     } 
    } 
} 

См picture.You может понять конструкцию.

Это то, что я хочу сделать. 1-й я открываю Form2, используя кнопку в Form1. Затем я ввожу текст и нажимаю кнопку («Отображать в текстовом поле Form1»). Когда это щелкнуть, это значение должно быть видно в 3 текстовых блоках в Form1.I, в которых используются Message Boxs, чтобы узнать, проходят ли значения или нет. Значения передаются из Form2 в Form1. Но эти значения не отображаются в этих трех текстовых блоках, но переданные значения отображаются в окне сообщений. Причина для 3 текстовых ящиков можно понять, просмотрев код. Так в чем же ошибка?

+0

вы должны создать переменные в Form1, которые вы хотите провести при закрытии Form2 есть пара способы сделать это .., но просто вызывая 'new Form2(). Show();' не тот подход, который я бы принял. Я бы создал var frm2 = new Form2(), затем передал и/или создал переменные, чтобы удерживать значения, когда вы закрываете form2, тогда, когда вы показываете форму 2, я бы вызвал метод ShowDialog(), чтобы при закрытии он возвращался к вызывающему методу. n Я бы назвал frm2.Dispose() 'надеюсь, что это имеет смысл – MethodMan

+0

Жаль, что я новичок в VS или C#, это лучше, если вы предоставите код. Поэтому я могу это понять! Спасибо! @MethodMan –

+0

лучше, что вы делаете какой-то поиск в Google, как это сделать .. это не «заводская фабрика кода», и это не так сложно .. так что я не буду делать эту работу за вас .. извините, как работает этот сайт. Я дал вам объяснение, как это сделать. – MethodMan

ответ

0

На самом деле у меня есть объект, чтобы пройти.Так что я сделал это

в Form1 ->

private void btnOpenF2_Click(object sender, EventArgs e) 
     { 
      new Form2(this).Show(); 
     } 

в form2 ->

public partial class Form2 : Form 
    { 
     Form1 a; 
     public Form2(Form1 b) 
     { 
      a = b; 
      InitializeComponent(); 

     } 
     private void button1_Click(object sender, EventArgs e) 
     { 
      string g; 
      g = textBox1.Text; 


      a.set(g); 
      this.Close(); 
     } 
    } 
0

Поместите статический строка в вашем Form2

public static string s = string.Empty; 

и, в вашем Дисплей в Form1 Textbox щелчка кнопки события, получить значение из текстового поля в строке s:

s = textBox1.Text; 
Form1 f1 = new Form1(); 
f1.Show(); 

раз, Form1 появляется снова, а затем в событии Form1_Load, просто передайте ваш текст Form2 значение для текстовых полей ваших Form1 «S, стоимость которого была получил переменной s:

foreach (Control text in Controls) 
{ 
    if (text is TextBox) 
    { 
     ((TextBox)text).Text = Form2.s; 
    } 
} 

Display

+0

Можете ли вы 'foreach (текст в текстовом поле в элементах управления)'? – khargoosh

+0

@khargoosh вы не можете, потому что вам нужно определить _base class_ как ** Control ** и ** Textbox ** не является базовым классом для всех элементов управления :) –

0

enter image description here

public partial class Form1 : Form 
{ 
    Form2 fm2; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     fm2 = new Form2(); 
     fm2.Show(); 
     fm2.button1.Click += new EventHandler(fm2button1_Click); 
    } 
    private void fm2button1_Click(object sender, EventArgs e) 
    { 
     textBox1.Text = fm2.textBox1.Text; 
    } 


} 

и код в form2

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 
} 

набор модификаторов свойство textbox1 и button1 к public

0

Я бы просто передать его в конструктор. Таким образом, код form2, будет:

public partial class Form2 : Form 
{ 
    string _input; 

    public Form2() 
    { 
     InitializeComponent(); 
    } 

    public Form2(string input) 
    { 
     _input = input; 
     InitializeComponent(); 

     this.label1.Text = _input; 
    } 
} 

И вызов в Form1 будет:

private void button1_Click(object sender, EventArgs e) 
{ 
    fm2 = new Form2(this.textBox1.Text.ToString()); 
    fm2.Show(); 
} 
Смежные вопросы