Передача данных между формами

У меня две формы. Во-первых, Form1 имеет поле группы, некоторые метки и список. Я нажимаю кнопку и открывается новый Form2 и содержит текст. Я хочу передать текст в Form2 в список в Form1.

До сих пор то, что я сделал, делает модификатор списка доступным для публики, а затем помещает этот код в кнопку Form2

Form1 frm = new Form1();
frm.ListBox.items.Add(textBox.Text);

Но удивительно, это не добавляет никакой ценности. Я думал, что ошибся с вставкой, поэтому сделал ту же процедуру. На этот раз я сделал ярлык public и добавил значение текстового поля к свойству Text, но он не удался.

Любые идеи?

Ответ 1

Form1 frm = new Form1();

frm теперь является новым экземпляром класса Form1.

frm не ссылается на исходный экземпляр Form1, который был показан пользователю.

Одно из решений - при создании экземпляра Form2 передать ему ссылку на ваш текущий экземпляр Form1.

Ответ 2

Попробуйте добавить параметр к конструктору второй формы (в вашем примере Form1) и передать значение таким образом. После вызова InitializeComponent() вы можете добавить параметр в список в качестве выбора.

public Form1(String customItem)
{
  InitializeComponent();
  this.myListBox.Items.Add(customItem);
}

// In the original form code:
Form1 frm = new Form1(this.textBox.Text);

Ответ 3

Ниже код отлично работает на моей машине.

private void button1_Click(object sender, EventArgs e)
{
    Form1 f1 = new Form1();
    f1.listBox1.Items.Add(textBox1.Text );//ListBox1 : Modifier property made public
    f1.ShowDialog();
}

Хорошо, если вы вызываете последовательность, как, Form1-> Form2 и Form2 обновляют значение Form1, тогда вы должны использовать ParentForm() или Delegate, чтобы обновить предыдущая форма

Ответ 4

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

Form1:

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

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2();
        frm.Show();
        frm.VisibleChanged += formVisibleChanged;


    }

    private void formVisibleChanged(object sender, EventArgs e)
    {
        Form2 frm = (Form2)sender;
        if (!frm.Visible)
        {
            this.listBox1.Items.Add(frm.ReturnText);
            frm.Dispose();
        }


    }

}

Form2:

 public partial class Form2 : Form
{

    public string ReturnText { get; set; }

    public Form2()
    {
        InitializeComponent();

    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.ReturnText = this.textBox1.Text;
        this.Visible = false;

    }


}

Ответ заключается в объявлении публичной собственности на Form2 и при закрытии формы. Доступ к тому же экземпляру и извлечение значения.

Ответ 5

Пожалуйста, избегайте концепции создания таких публичных членов, как вы сказали → Я сделал, чтобы сделать модификатор списка доступным для публики, а затем в form2 в коде кнопки < это не очень хорошая практика, с другой стороны, хорошая находится в Brad Christie Post, я надеюсь, что вы ее получили.

Ответ 6

Этот код будет внутри формы, содержащей myListBox, вероятно, внутри обработчика нажатия кнопки.

Form2 frm2 = new Form2();
frm2.ShowDialog();
this.myListBox.Items.Add(frm2.myTextBox.Text);
frm2.Dispose();