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

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

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

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

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

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

Ответы [ 19 ]

1 голос
/ 22 мая 2017

Конструкторы - лучший способ передачи данных между формами или объектами графического интерфейса. Вы можете сделать это. При нажатии на кнопку form1 вы должны иметь:

Form1.Enable = false;
Form2 f = new Form2();
f.ShowDialog();

В форме 2, когда пользователь нажимает кнопку, он должен иметь такой код или подобный:

this.Close();
Form1 form = new Form1(textBox1.Text)
form.Show();

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

0 голосов
/ 02 октября 2018

Как насчет использования публичного мероприятия

Я бы сделал это так.

public class Form2
{
   public event Action<string> SomethingCompleted;

   private void Submit_Click(object sender, EventArgs e)
   {
       SomethingCompleted?.Invoke(txtData.Text);
       this.Close();
   }
}

и вызовите его из Form1 следующим образом.

private void btnOpenForm2_Click(object sender, EventArgs e)
{
    using (var frm = new Form2())
    {
        frm.SomethingCompleted += text => {
            this.txtData.Text = text;
        };

        frm.ShowDialog();
    }
}

Тогда Form1 может получить текст из Form2, когда Form2 закрыта

Спасибо.

0 голосов
/ 22 июля 2018

если вы измените Свойство Модификаторов элемента управления в Форме на Публичный, другие Формы могут получить доступ к этому элементу управления. F.E. :

    Form2 frm;
    private void Form1_Load(object sender, EventArgs e)
    {
        frm = new Form2();
        frm.Show();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(frm.txtUserName.Text); 
        //txtUserName is a TextBox with Modifiers=Public        
    }
0 голосов
/ 04 июля 2018

Вы можете использовать это;

Form1 button1 click

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

И добавьте это в Form2

public string info = "";

Form2 button1 click

private void button1_Click(object sender, EventArgs e)
{

    info = textBox1.Text;
    this.Hide();
    BeginInvoke(new MethodInvoker(() =>
    {
        Gogo();
    }));
}

public void Gogo()
{
    Form1 frm = new Form1();
    frm.Show();
    frm.Text = info;
}
0 голосов
/ 22 февраля 2018

Вы можете использовать другой подход, если хотите.

  1. Использование System.Action (здесь вы просто передаете функцию основных форм в качестве параметра дочерней форме, например функции обратного вызова)
  2. Метод OpenForms (Вы вызываете одну из ваших открытых форм)

Использование System.Action

Вы можете думать об этом как о функции обратного вызова, передаваемой дочерней форме.

// -------- IN THE MAIN FORM --------

// CALLING THE CHILD FORM IN YOUR CODE LOOKS LIKE THIS
Options frmOptions = new Options(UpdateSettings);
frmOptions.Show();

// YOUR FUNCTION IN THE MAIN FORM TO BE EXECUTED
public void UpdateSettings(string data)
{
   // DO YOUR STUFF HERE
}

// -------- IN THE CHILD FORM --------

Action<string> UpdateSettings = null;

// IN THE CHILD FORMS CONSTRUCTOR
public Options(Action<string> UpdateSettings)
{
    InitializeComponent();
    this.UpdateSettings = UpdateSettings;
}

private void btnUpdate_Click(object sender, EventArgs e)
{
    // CALLING THE CALLBACK FUNCTION
    if (UpdateSettings != null)
        UpdateSettings("some data");
}

Метод OpenForms

Этот метод прост ( 2 строки ). Но работает только с открытыми формами. Все, что вам нужно сделать, это добавить эти две строки, где бы вы ни хотели передать некоторые данные.

Main frmMain = (Main)Application.OpenForms["Main"];
frmMain.UpdateSettings("Some data");

Я предоставил свой ответ на аналогичный вопрос здесь

0 голосов
/ 04 июля 2017

Простой получить значение с помощью:

var form1 = new Form1();
string sample = form1.examplestring;

Чтобы установить значение:

var form1 = new Form1();
form1.examplestring = example;

но отметьте строку как "публичную строку"

public string example = "test";
0 голосов
/ 31 марта 2015

Это очень просто. Предположим, у вас есть 2 окна формы Form1 и Form2, и вы хотите отправить запись textbox1 из Form1 в Form2 и отобразить эту запись в label1 Form2; затем в Form2 создайте метку с именем label1 и перейдите к свойству label1 и установите 'Modifiers' = public, а в первой форме создайте textBox с идентификатором textBox1 и кнопкой имени submit, затем напишите следующий код для события нажатия кнопки

button1_Click(object sender, EventArgs e)
{
  Form2 obj=new Form2();
  obj.label1.text=textBox1.text.ToString();
  obj.show();
}

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

0 голосов
/ 31 октября 2013

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

В обработчике кнопок формы 1:

private void button2_Click(object sender, EventArgs e)
{
Form2 newWindow = new Form2(textBoxForReturnValue);
newWindow.Show(); 
}

В форме 2

public static TextBox textBox2; // class atribute

public Form2(TextBox textBoxForReturnValue)
{
    textBox2= textBoxForReturnValue;
}

private void btnClose_Click(object sender, EventArgs e)
{

    textBox2.Text = dataGridView1.CurrentCell.Value.ToString().Trim();
    this.Close();
}
0 голосов
/ 20 марта 2013

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

1.) Перейдите в Form2, затем дважды щелкните по нему. В коде введите это.

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

2.) Перейдите в Form1, затем дважды щелкните по ней. В коде типа это. // На вашей командной кнопке в Form1

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