Передача данных между формами
У меня две формы. Во-первых, 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();