Отправить значения из одной формы в другую форму - PullRequest
69 голосов
/ 13 октября 2009

Я хочу передать значения между двумя формами (c #). Как я могу это сделать?

У меня есть две формы: Form1 и Form2.

Form1 содержит одну кнопку. Когда я нажимаю на эту кнопку, форма Form2 должна открыться, а форма Form1 должна быть в неактивном режиме (т.е. не выбирается).

Form2 содержит одно текстовое поле и одну кнопку отправки. Когда я набираю любое сообщение в текстовом поле формы Form2 и нажимаю кнопку отправки, форма Form2 должна закрыться, а форма Form1 должна выделяться с отправленным значением.

Как я могу это сделать? Может кто-нибудь помочь мне сделать это на простом примере.

Ответы [ 19 ]

46 голосов
/ 13 октября 2009

Для этого есть несколько решений, но я обычно использую этот шаблон.

// Form 1
// inside the button click event
using(Form2 form2 = new Form2()) 
{
    if(form2.ShowDialog() == DialogResult.OK) 
    {
        someControlOnForm1.Text = form2.TheValue;
    }
}

И ...

// Inside Form2
// Create a public property to serve the value
public string TheValue 
{
    get { return someTextBoxOnForm2.Text; }
}
33 голосов
/ 16 октября 2011
private void button1_Click(object sender, EventArgs e)
{
        Form2 frm2 = new Form2(textBox1.Text);
        frm2.Show();    
}

 public Form2(string qs)
    {
        InitializeComponent();
        textBox1.Text = qs;

    }
12 голосов
/ 11 января 2013

Определить свойство

public static class ControlID {  
    public static string TextData { get; set; }
}

В form2

private void button1_Click(object sender, EventArgs e)
{  
    ControlID.TextData = txtTextData.Text;   
}

Получение данных в form1 и form3

private void button1_Click(object sender, EventArgs e)
{   
    string text=  ControlID.TextData;   
}
4 голосов
/ 13 марта 2014

После серии борьбы за передачу данных из одной формы в другую я наконец нашел устойчивый ответ. Это работает как шарм.

Все, что вам нужно сделать, это объявить переменную как public static datatype 'variableName' в одной форме и присвоить значение этой переменной, которое вы хотите передать другой форме, и вызвать эту переменную в другой форме, используя непосредственно имя формы ( Не создавайте объект этой формы, так как статические переменные могут быть доступны напрямую ), и обращайтесь к значению этой переменной.

Пример таков:

Form1

public static int quantity;
quantity=TextBox1.text; \\Value which you want to pass

Form2

TextBox2.Text=Form1.quantity;\\ Data will be placed in TextBox2
4 голосов
/ 06 января 2014

Объявить открытую строку в form1

public string getdata;

В кнопке form1

form2 frm= new form2();
this.hide();
form2.show();

Чтобы отправить данные на form1, вы можете попробовать любое событие и код, следующий за этим событием

form1 frm= new form1();
form1.getdata="some string to be sent to form1";

Теперь после закрытия form2 и открытия form1 вы можете использовать возвращенные данные в строке getdata.

3 голосов
/ 13 октября 2009

Я работал над различными проектами winform, и поскольку приложения становятся более сложными (больше диалогов и взаимодействий между ними), тогда я начал использовать некоторую систему обработки событий, чтобы выручить меня, потому что управление открытием и закрытием окон вручную быть трудно поддерживать и развиваться дальше.

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

2 голосов
/ 24 апреля 2014

В этом коде вы передаете текст в Form2. Form2 показывает этот текст в textBox1. Пользователь вводит новый текст в textBox1 и нажимает кнопку отправки. Form1 берет этот текст и показывает его в текстовом поле на Form1.

public class Form2 : Form
{
    private string oldText;

    public Form2(string newText):this()
    {
        oldText = newText;
        btnSubmit.DialogResult = DialogResult.OK;
    }

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

    public string getText()
    {
        return textBox1.Text;
    }

    private void textBox1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            DialogResult = System.Windows.Forms.DialogResult.OK;
        }
    }
}

А это код Form1:

public class Form1:Form
{
    using (Form2 dialogForm = new Form2("old text to show in Form2"))
    {
        DialogResult dr = dialogForm.ShowDialog(this);
        if (dr == DialogResult.OK)
        {
            tbSubmittedText = dialogForm.getText();
        }
        dialogForm.Close();
    }
}
2 голосов
/ 13 октября 2009

объявить строку в form1 открытая строка TextBoxString;

в форме события click добавить

private void button1_Click(object sender, EventArgs e)
    {
        Form1 newform = new Form1();
        newform = this;
        this.Hide();
        MySecform = new Form2(ref newform);
        MySecform.Show();
    }

в конструкторе form2

public Form2(ref Form1 form1handel)
    {
        firstformRef = form1handel;
        InitializeComponent();
    }

в клеточной переменной form2 Form1 firstformRef;

private void Submitt_Click(object sender, EventArgs e)
    {
        firstformRef.TextBoxString = textBox1.Text;
        this.Close();
        firstformRef.Show();

    }
2 голосов
/ 05 февраля 2012

Код Form1:

private void button1_Click(object sender, EventArgs e)
{
            Form2 f2 = new Form2();
            f2.ShowDialog();
            MessageBox.Show("Form1 Message :"+Form2.t.Text); //can put label also in form 1 to show the value got from form2
}

Код формы 2:

        public Form2()
        {
            InitializeComponent();
            t = textBox1;                        //Initialize with static textbox
        }
        public static TextBox t=new TextBox();   //make static to get the same value as inserted
        private void button1_Click(object sender, EventArgs e)
        {

            this.Close();

        }

Это работает!

1 голос
/ 06 апреля 2018

Хорошо, поэтому Form1 имеет текстовое поле, в первую очередь вы должны установить для этого Form1 текстовое поле public в свойстве textbox.

Кодовая форма1:

Public button1_click()
{
    Form2 secondForm = new Form2(this);
    secondForm.Show();
}

Передайте Form1 как this в конструкторе.

Кодовая форма2:

Private Form1 _firstForm;

Public Form2(Form1 firstForm)
{
    _firstForm = firstForm:
}

Public button_click()
{
    _firstForm.textBox.text=label1.text;
    This.Close();
}
...