передавать значение из одной формы в другую

У меня две формы, и мне нужно передать значение из form1.textbox1 в form2.variable

Form1:

string Ed = "", En = ""; public string En1 { get { return En; } set { En = value; } } public string Ed1 { get { return Ed; } set { Ed = value; } } private void button1_Click(object sender, EventArgs e) { Form2 F2 = new Form2(); F2.Show(); F2.textbox1value = Ed; F2.textbox2value = En; } 

`и Form2:

 public string textbox1value { get { return textBox1.Text; } set { textBox1.Text = value; } } public string textbox2value { get { return textBox2.Text; } set { textBox2.Text = value; } } private void button1_Click(object sender, EventArgs e) { Form1 F1 = new Form1(); F1.Ed1 = textBox1.Text; F1.En1 = textBox2.Text; } 

когда я нажимаю «save» на form2 и открываю debug, я вижу «ed = 3; en = 5», но когда я нажимаю «open form2» на form1 и открываю debug, я вижу «Ed = null; En = null;» и показывает пустую форму без значения в текстовых windowsх. Помоги пожалуйста.

Вы создаете новую форму, поэтому старые значения будут потеряны. Значения по умолчанию равны нулю.

 Form1 F1 = new Form1(); //I'm a new Form, I don't know anything about an old form, even if we are the same type 

Вы можете использовать статические vars, которые были бы самым простым решением для архивирования вашей цели, но есть и другие способы, такие как конструкторы, контейнеры, события и т. Д.

 public static string En1 { get { return En; } set { En = value; } } public static string Ed1 { get { return Ed; } set { Ed = value; } } 

И в другой форме

 private void button1_Click(object sender, EventArgs e) { Form1 F1 = new Form1(); Form1.Ed1 = textBox1.Text; Form1.En1 = textBox2.Text; } 

Пожалуйста, имейте в виду, что статическая переменная существует только один раз для classа. Поэтому, если у вас несколько экземпляров, и вы изменяете статическую переменную в одном, это изменение также влияет на все другие экземпляры.

Вы можете создать constuctor для form2 который принимает 2 аргумента и form2 доступ к этим переменным

 Form2 frm2 = new Form2(textBox1.Text,textBox2.Text); frm2.Show(); 

Конструктор будет выглядеть

 public Form2(string txt1,string txt2) { InitializeComponent(); textbox1value.Text = txt1; textbox1value.Text=txt2 } 

Существует множество способов передачи данных между формами, такими как

  1) Using constructor 2) Using objects 3) Using properties 4) Using delegates 

Проверьте эту ссылку для получения более подробной информации http://www.codeproject.com/Articles/14122/Passing-Data-Between-Forms

Надеюсь, поможет!

Отладчик ничего не жалуется? Гектометр Возможно, вы можете попробовать изменить свой метод button1_click в форме 1 следующим образом:

 private void button1_Click(object sender, EventArgs e) { Form2 F2 = new Form2(); Form2.Parent = this; F2.Show(); F2.textbox1value = F2.Parent.Ed; F2.textbox2value = F2.Parent.En; } 

Всегда сохраняйте копию информации form2 в form1 , это:

Когда пользователь нажимает form2 « Сохранить» на form2 информация переходит в локальные переменные form2 а затем form2 запускает событие (сообщает form1 что его информация должна быть сохранена). В form1 вы обрабатываете это событие и form1 что всякий раз, когда это событие запускается from1 необходимо скопировать информацию form2 в себя.

С другой стороны, когда вы снова открываете form2 вы должны сначала вернуть ей информацию, а затем выполнить метод show() . После этого вы должны обрабатывать shown() событие form2 таким образом, чтобы всякий раз, когда он был показан, первая form2 должна помещать соответствующую информацию в соответствующие текстовые поля и т. Д.

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

Следуйте шагам:

В форме 1: убедитесь, что ваш контроль открыт.

  eg: txtForm1.Text = "Bangalore"; 

В форме 2:

Шаг 1. Создайте экземпляр формы 1 глобально. Если экземпляр создается локально, доступ к содержимому элемента управления невозможен, возвращается только нулевое значение, даже если данные были заполнены.

Шаг 2: Получить значение элемента управления экземпляром формы 1.

  eg: Form1 frm1 = new Form1(); string Form1Value = frm1.txtForm1.Text 

Если вы описываете значение как статическое, вы можете получить к нему доступ непосредственно в Form1, и вы можете получить к нему доступ из Form2:

 static public string Text_; string PassedValue_=Form1.Text_; 

Этот вопрос может быть старым, но в любом случае …

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

 //Form1 Form2 form2; button1_clic(object sender, eventArgs e) { form2 = new Form2(textbox1.text); form2.Showdialog(); } //Form2 string var = string.empty; public Form2(string val) { InitializeComponents(); var = val; } 
  • Как использовать индикатор выполнения WinForms?
  • Событие, когда окно максимизируется / не максимизируется
  • Лучшая практика сохранения настроек приложения в приложении Windows Forms
  • Как создать приложение на C #, которое решит, показывать ли его как консольное или оконное приложение?
  • Включить Entity Framework 6 для MySql (C #) в WinForms Microsoft Visual Studio 2013
  • как изменить цвет заголовка Winform DataGridview?
  • Выделить событие с текстовым полем?
  • Связь TCP-клиент с сервером
  • Custom Caret для WinForms TextBox
  • Невозможно просмотреть конструктор при кодировании формы в C #
  • Неверная операция кросс-streamов: управление осуществляется из streamа, отличного от streamа, который был создан на
  • Давайте будем гением компьютера.