我在TextBox
中有一个名为pass
的{{1}}我需要获取Form1
中的值。我试过这个:
form2
上面的代码返回一个空字符串,为什么?
答案 0 :(得分:3)
您没有通过语法错误等证明您的实际代码。 - 您的问题的唯一合理解释是您没有正确地将Form1
的引用传递给Form2
,而是创建而是一个新表单 - 新表单将具有空文本框。
为了进一步帮助您,请说明如何在实际代码中将引用传递给Form1。
修改强>
现在看到您的编辑正好是问题所在。您必须将Form1实例传递给form2,而不是创建一个新实例,即:
public partial class form2 : Form
{
private Form1 form1;
public form2(Form1 otherForm)
{
form1 = otherForm;
}
public void Foo()
{
MessageBox.Show(form1.GetPass());
}
}
答案 1 :(得分:2)
在声明部分中将一个字符串变量定义为Public 对于前我们有一个名为“frmOne”的表单
public string strVar = string.Empty;
现在,将“frmOne”的TextBox值赋给该变量,从中获取Textbox的值。
代表。
strVar = Textbox1.Text.ToString();
现在以另一种形式说“frmTwo”,您将获得“frmOne”文本框的值(您想要获取值):
frmOne frm = new frmOne();
string strValue = frm.strVar;
因此,最后strmalue局部变量frmTwo包含frmOne的Textbox值。
答案 2 :(得分:0)
因为您每次致电Form1
时都在创建GetPass()
的新实例。
您需要以这种或那种方式获取已打开form1
的实例,并在其上调用GetPass
:
form1.GetPass();
如果form1
和form2
的创建顺序没有具体说明,您可以使用以下内容获取form1
的实例:
foreach (Form openedForm in Application.OpenForms) {
if (openedForm.GetType() == Form1) {
MessageBox.Show(openedForm.GetPass());
}
}
答案 3 :(得分:0)
您正在创建一个新的form1,其中文本框可能为空,并在该空表单上调用GetPass()。您需要一个已打开的form1的实例,其中文本框可能有值。
答案 4 :(得分:0)
它正在返回空,因为您正在创建表单的新实例。假设Form1
已经在某处打开,您需要检索Form1
的现有实例并从那里提取值。
答案 5 :(得分:0)
嗨,你可以这样写:
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
}
internal Form2 F2=new form2();
private void CommandBarButton1_Click(object sender, EventArgs e)
{
MessageBox.Show(f2.TextBox1.Text);
}
}