Передача значения из одной формы в другую
У меня есть две формы с именем form1
и form2
:
-
form1
состоит из label
и a button
.
-
form2
состоит из textBox
и button
Когда я нажимаю кнопку form1
, это будет отображаться form2
. Любые входы в textBox
должны быть записаны на form1.label
после нажатия кнопки в form2
.
У меня есть код ниже, но он не работает.
// Code from Form 1
public partial class Form1 : Form
{
public void PassValue(string strValue)
{
label1.Text = strValue;
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 objForm2 = new Form2();
objForm2.Show();
}
}
// Code From Form 2
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form1 objForm1 = new Form1();
objForm1.PassValue(textBox1.Text);
this.Close();
}
}
И снимок экрана:
![Application screenshot]()
Как я могу это понять?
Ответы
Ответ 1
Вы не получаете доступ к своей форме1, из которой вы создали форму2. В form2 button1_Click вы создаете новый экземпляр Form1, который не совпадает с начальным. Вы можете передать свой экземпляр form1 в конструктор form2 следующим образом:
// Code from Form 1
public partial class Form1 : Form
{
public void PassValue(string strValue)
{
label1.Text = strValue;
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 objForm2 = new Form2(this);
objForm2.Show();
}
}
// Code From Form 2
public partial class Form2 : Form
{
Form1 ownerForm = null;
public Form2(Form1 ownerForm)
{
InitializeComponent();
this.ownerForm = ownerForm;
}
private void button1_Click(object sender, EventArgs e)
{
this.ownerForm.PassValue(textBox1.Text);
this.Close();
}
}
Ответ 2
Как упоминалось в других сообщениях, вы не сможете ссылаться на оригинальную Form1, создав новый экземпляр Form1. Вы можете передать Form1 в конструктор Form2 или выставить текст Form2 как общедоступное свойство, но я обычно предпочитаю использовать делегаты для этого, чтобы поддерживать свободную связь.
// Code from Form 1
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 objForm2 = new Form2();
objForm2.PassValue += new PassValueHandler(objForm2_PassValue);
objForm2.Show();
}
public void objForm2_PassValue(string strValue)
{
label1.Text = strValue;
}
}
// Code From Form 2
public delegate void PassValueHandler(string strValue);
public partial class Form2 : Form
{
public event PassValueHandler PassValue;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (PassValue != null)
{
PassValue(textBox1.Text);
}
this.Close();
}
}
Ответ 3
Когда вы делаете:
Form1 objForm1 = new Form1();
objForm1.PassValue(textBox1.Text);
... вы создаете новый Form1
и вызываете метод PassValue
на неправильном объекте Form1
. Вместо этого вы можете сделать:
public partial class Form1 : Form
{
// This is the text that will be entered in form2
public String form2text;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// Show form2
Form2 objForm2 = new Form2(this);
objForm2.ShowDialog();
// When form2 is closed, update the label text on form1
label1.Text = form2text;
}
}
public partial class Form2 : Form
{
// This is the instance of Form1 that called form2
private Form1 form1caller;
public Form2(Form1 form1caller)
{
InitializeComponent();
this.form1caller = form1caller;
}
private void button1_Click(object sender, EventArgs e)
{
// Pass the textBox value to form1 before closing form2
form1caller.form2text = textBox1.Text;
this.Close();
}
}
Ответ 4
Я просто пробовал этот код, и он работает, конечно, это поможет вам.
в первом виде (Form1
) ниже:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f = new Form2(textBox1.Text);
f.ShowDialog();
}
}
во второй форме (Form2
) используйте ниже коды:
public partial class Form2 : Form
{
public Form2( string st)
{
InitializeComponent();
textBox1.Text = st;
}
private void Form2_Load(object sender, EventArgs e)
{
}
}
Ответ 5
Вы можете сделать это:
class Form2
{
public string ReturnedText = "";
private void button1_Click(object sender, EventArgs e)
{
ReturnedText = textbox1.Text;
Close();
}
}
и в форме1
Form2 objForm2 = new Form2();
objForm2.ShowDialog();
string ret = objForm2.ReturnedText;
Ответ 6
Вы должны передать ссылку на form1 в form2 вместо создания нового экземпляра в этом коде:
private void button1_Click(object sender, EventArgs e)
{
Form1 objForm1 = new Form1(); // ← this is another form1, not that you see
objForm1.PassValue(textBox1.Text);
this.Close();
}
Ответ 7
Это то, что вы собираетесь делать:
// Code from Form 1
public partial class Form1 : Form
{
public string MyValue { get; set; }
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 objForm2 = new Form2();
objForm2.textBox1.Text = MyValue;
objForm2.MainForm = this;
objForm2.Show();
}
}
// Code From Form 2
public partial class Form2 : Form
{
public Form1 MainForm { get; set; }
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MainForm.MyValue = textBox1.Text;
MainForm.Show();
this.Close();
}
}
Ответ 8
Способ, которым я обычно подхожу к этому требованию, выглядит следующим образом:
Я помещаю публичное свойство в класс Form2:
public string ValueFromForm1 { get; set; }
//In the constructor, or other relevant method, I use the value
public Form2()
{
form2LabelToDisplayForm1Value.Text = ValueFromForm1;
}
Чтобы вернуть что-то в Form1, вам нужно добавить публичное свойство в класс Form1 для получения значения, а затем отправить ссылку на форму в Form2, чтобы Form2 мог установить значение:
//Add reference property to Form2 class
public Form1 CallingForm { get; set; }
//Form2 can access the value on Form1 as follows:
private someMethod()
{
this.CallingForm.ValueFromForm2 = "Info coming from form 2";
}
затем
//Add public property to Form1 class
public string ValueFromForm2 { get; set; }
//When Form2 is created, set the reference property
Form2 objForm2 = new Form2();
objForm2.CallingForm = this;
objForm2.Show();
Так как Form2 теперь имеет ссылку на Form1, который был создан, нет необходимости вызывать новый Form1() в любом месте Form2. Все, что нужно сделать Form2, это установить значение в ссылке, а затем закрыть.
Ответ 9
Код формы 1: -
namespace Passing_values_from_one_form_to_other
{
public partial class Form1 : Form
{
string str;
private String value1;//taking values from form no _of_test_cases
public string value
{
get { return value1; }
set { value1 = value; }
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
textBox1.Text = str;
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowDialog();
str = f2.passvalue;
}
}
}
Код формы 2....: -
namespace Passing_values_from_one_form_to_other
{
public partial class Form2 : Form
{
private string str;
public string passvalue
{
get { return str; }
set { str = value; }
}
public Form2()
{
InitializeComponent();
}
private void Btn_Ok1_Click(object sender, EventArgs e)
{
passvalue = textBox1.Text;
this.Close();
}
}
}
непосредственно выполнить его u получит четкое изображение.... так же u может передавать значения из одной формы в другую...
публикуйте свои комментарии, если у вас возникнут проблемы...
надеюсь, что это поможет...
иначе вы можете ссылаться на это видео...
http://www.youtube.com/watch?v=PI3ad-TebP0