Передача данных между формами - PullRequest
11 голосов
/ 03 января 2011

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

. До сих пор я сделал модификатор списка в public и поместил этот кодв кнопке Form2

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

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

Есть идеи?

Ответы [ 6 ]

15 голосов
/ 03 января 2011

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

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

// In the original form's code:
Form1 frm = new Form1(this.textBox.Text);
4 голосов
/ 25 сентября 2011

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

Форма 1:

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();
        }


    }

}

Форма 2:

 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 и когда форма скрыта.Получите доступ к тому же экземпляру и получите значение.

4 голосов
/ 03 января 2011

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

  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();
    }

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

3 голосов
/ 03 января 2011
Form1 frm = new Form1();

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

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

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

1 голос
/ 25 сентября 2011

Пожалуйста, избегайте концепции публичных участников, как вы сказали >> Я сделал это сделать модификатор listbox для public, а затем в form2 в коде кнопки << </strong> это не очень хорошая практика, с другой стороны, хорошая есть в Посте Брэда Кристи, надеюсь, вы ее получили.

0 голосов
/ 03 января 2011

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

Form2 frm2 = new Form2();
frm2.ShowDialog();
this.myListBox.Items.Add(frm2.myTextBox.Text);
frm2.Dispose();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...