С# WindowsForms - отправить текстовое поле из формы 1 в форму 2 в визуальной студии

у меня есть 2 формы на визуальной студии,

form1 have textbox1.text
form2, have textbox2.text and btnSave

obs: form2 открывается, когда я нажимаю другую кнопку в форме 1:

Form new = new form2();
           nova.Show();

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

Спасибо


person felipe Salomao    schedule 25.04.2013    source источник
comment
Добавьте общедоступное свойство в form1.   -  person Robert Harvey    schedule 25.04.2013
comment
Добавьте общедоступную статическую переменную в Form1, и вы сможете получить к ней доступ из любого места.   -  person Dilshod    schedule 25.04.2013
comment
Куда вы отправляете данные текстового поля из формы 2 в форму 1? Еще одно текстовое поле? что ты уже испробовал? Пожалуйста, опубликуйте свой код.   -  person Brian    schedule 25.04.2013
comment
если вы добавляете нестатическое общедоступное свойство или переменную, вам нужно передать экземпляр form1 в form2.   -  person Dilshod    schedule 25.04.2013
comment
Как я могу добавить общедоступную статическую переменную?   -  person felipe Salomao    schedule 25.04.2013
comment
Вы должны объяснить, какая связь существует между двумя формами. Является ли Form1 родителем Form2 (это означает, что внутри кода Form1 вы создаете новый экземпляр Form2() и показываете его модально (Form2.ShowDialog()) или немодально (Form2.Show())?   -  person Steve    schedule 25.04.2013
comment
@Dilshod Это довольно ужасный дизайн, и его выполнение для любого проекта нетривиального размера приводит к беспорядку спагетти, в котором просто невозможно разобраться.   -  person Servy    schedule 25.04.2013
comment
@Steve Отредактировано для лучшего понимания   -  person felipe Salomao    schedule 25.04.2013
comment
@Servy Я разместил там 2 комментария. Не могли бы вы уточнить, о каком из них вы говорите.   -  person Dilshod    schedule 25.04.2013
comment
@Dilshod На самом деле это относится к обоим, хотя первое в большей степени, чем второе.   -  person Servy    schedule 25.04.2013
comment
Если вы решили проблему, опубликуйте ответ; не редактируйте вопрос.   -  person Andrew Barber    schedule 12.05.2013


Ответы (3)


Попробуйте это, пожалуйста: Шаг 1: Создайте конструктор для класса form2, как показано ниже:

 public Form2(string strTextBox)
        {
            InitializeComponent();
            label1.Text = strTextBox;
        }

Шаг 2: Создайте экземпляр класса form2 в обработчике события нажатия кнопки form1, как показано ниже:

 private void button1_Click(object sender, EventArgs e)
        {
            Form2 obj1 = new Form2(textBox1.Text);
            obj1.Show();
            this.Hide();
        }
person Asif Mahamud    schedule 25.04.2013
comment
Это не сработало, как form2 будет отправлять txt-контент в form1? следует использовать кнопку, но это сбивает с толку .. - person felipe Salomao; 26.04.2013
comment
здесь форма1 отправляет текст в форму2 в моем примере. и есть конструктор в форме2. поэтому при инициализации form2 отправьте в конструктор значение, поскольку param.its работает для меня. textBox1 — это текстовое поле в form1, где задано значение. кнопка1 в форме1. в форме2 метка1 — это метка для отображения значения из формы2. и это работает для меня - person Asif Mahamud; 26.04.2013
comment
Я долго искал этот кусок кода. Спасибо. - person UserMat; 06.07.2016

Создайте событие во второй форме, которое может запускаться при сохранении формы:

public event Action Saved;

Затем создайте свойство в этой форме, которое позволяет получить доступ к тексту текстового поля:

public string SomeTextValue //TODO: rename to meaningful name
    { get{ return textbox2.Text;} }

Затем вам нужно запустить событие Saved при сохранении формы:

if(Saved != null)
    Saved();

Затем, когда вы впервые создаете форму в Form1, прикрепите к этому событию обработчик события:

Form2 child = new Form2();
child.Saved += () => textbox1.Text = child.SomeTextValue;
child.Show();

Обратите внимание: если вы также закрываете вторую форму сразу после ее сохранения, вам не нужно специальное событие, вместо этого вы можете просто использовать FormClosing.

person Servy    schedule 25.04.2013
comment
в form2 я добавил: событие public Action Saved; у меня есть 3 ошибки, затем я щелкнул сохраненный и нажал сгенерировать класс для сохраненного, затем остались 2 ошибки: ошибка 1 недопустимый токен «событие» в объявлении класса, структуры или члена интерфейса и ошибка 2 недопустимый токен ';' в объявлении члена класса, структуры или интерфейса, после решения которого я продолжу следовать вашим шагам - person felipe Salomao; 25.04.2013
comment
@felipeSalomao Да, у меня он отлично компилируется и работает. public class Form2 { public event Action Saved; } компилируется именно так, как есть. - person Servy; 25.04.2013
comment
Теперь все в порядке с публичным событием Action Saved; проблема заключалась в том, что до того, как я не создал публичный класс Form2 {public event Action Saved; }, так что это было не в том месте, из-за этого у меня была ошибка, второй шаг тоже сработал: общедоступная строка SomeTextValue (я тоже создал это на form2), третий шаг не сработал, было около 7 ошибок, куда я должен его поместить? при нажатии кнопки открытия формы2 в форме1 верно? - person felipe Salomao; 25.04.2013
comment
@felipeSalomao Единственный код, который вы добавляете, — это одна строка посередине, которая фактически прикрепляет обработчик события к Saved. Первая и третья строки кода уже должны быть где-то в вашей программе. Найдите это где-нибудь и добавьте одну линию между ними двумя. - person Servy; 25.04.2013
comment
давайте продолжим обсуждение в чате - person felipe Salomao; 26.04.2013
comment
Я смог сделать все шаги без каких-либо ошибок, но проблема в том, что это просто не работает, какую кнопку я должен нажать, чтобы отправить текстовое поле из формы2 в форму1? мы не создали для этого никакой кнопки - person felipe Salomao; 26.04.2013
comment
@felipeSalomao Затем запустите событие, когда захотите. Я отредактировал в примере, как это сделать. - person Servy; 26.04.2013

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

На форме2:

public partial class form2 : Form
    {
        private string nome;
        public string passvalue
        {
            get { return nome; }
            set { nome = value; }
        }

form2, кнопка сохранения:

private void btnSalvar_Click(object sender, EventArgs e)
        {
            passvalue = txtMetragemcubica.Text;
            this.Hide();
        }

на форме1 (эта кнопка открывает форму2):

private void btnMetragemcubica_Click(object sender, EventArgs e)
        {
            form2 n = new form2();
            n.ShowDialog();
            txtMetragem.Text = n.passvalue
        }

Теперь это работает следующим образом: откройте форму 1, затем я нажимаю кнопку btnMetragemcubica и открывается форма2, затем я вставляю значения в другое текстовое поле и получаю результат в txtMetragemcubica, когда я нажимаю кнопку сохранения (btnSalvar), он закрывает форму2 и отправляет значение в form1 в текстовом поле txtMetragem.

Работает здесь отлично, надеюсь, поможет и другим людям. В любом случае спасибо за помощь

person felipe Salomao    schedule 26.04.2013