Получить значение comboBox из другой формы в C#
У меня есть 2 формы, в Form1 есть кнопка, которая покажет Form2. в Form2 у меня есть comboBox. После выбора элемента из comboBox, пользователь может нажать кнопку, чтобы отправить значение comboBox в Form1 и Form2 закроется.
Вот мой код:
Форма 1:
private void Button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.ShowDialog();
}
Форма 2:
private void Button1_Click(object sender, EventArgs e)
{
Form1 frm1 = new Form1();
frm1.textBox1.Text = Convert.ToString(comboBox1.SelectedValue);
this.DialogResult = DialogResult.OK;
}
Но я значение comboBox не появляется в текстовом поле на Form1saas
5 ответов:
Вы пытаетесь установить значение в поле combobox новой формы, потому что вы создаете его здесь:
Form1 frm1 = new Form1();Вы должны передать ссылку на экземпляр Form1 в Form2 (через конструктор или поле члена).
Правильный способ сделать это-добавить закрытое поле члена типа Form1 в класс Form2, добавить параметр в конструктор Form2 и инициализировать его при вызове конструктора:
var form2 = new Form2(this);Затем ссылайтесь на поле члена.
Вы должны отправить рефренс этого объекта в новую форму.
Форма 1:
private void Button1_Click(object sender, EventArgs e) { Form2 frm2 = new Form2(this); frm2.ShowDialog(); }Форма 2:
Form _parentForm; public Form2(Form frm) { _parentForm = frm; } private void Button1_Click(object sender, EventArgs e) { _parentForm.textBox1.Text = Convert.ToString(comboBox1.SelectedValue); this.DialogResult = DialogResult.OK; }
Попробуйте это на вашем событии нажатия кнопки:
TextBox txt = (Form1)this.Owner.Textbox1; txt.Text = combobox1.Text; this.Close();
Попробуйте этот код.
Форма 1:
public void SetValue(string str) { textBox1.Text = str; } private void button1_Click(object sender, EventArgs e) { Form2 frm2 = new Form2(this); frm2.Show(); }Форма 2:
Только для чтения Form1 _ownerForm;
public Form2(Form1 ownerForm) { InitializeComponent(); this._ownerForm = ownerForm; } private void button1_Click(object sender, EventArgs e) { string selectedText = comboBox1.SelectedItem.ToString(); this._ownerForm.SetValue(selectedText); this.Close(); }
Можно задать свойство modifiers в текстовом поле. Эта собственность должна быть общедоступной.
Форма 2 : '
public Form2()` { InitializeComponent(); } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { Form1 frm = (Form1)Application.OpenForms["Form1"]; frm.textBox1.Text = comboBox1.Text; this.Close(); }
Comments