从另一个表单获取文本框值

本文关键字:取文本 获取 另一个 表单 | 更新日期: 2023-09-27 18:14:12

我在Form1中有一个名为passTextBox,我需要获得form2中的值。我试过了:

public partial class Form1 : Form {
    public string GetPass() {
        return pass.Text; 
    }
}
public partial class form2 : Form {
    //... 
    MessageBox.Show(new Form1().GetPass());
}

上面的代码返回一个空字符串,为什么?

从另一个表单获取文本框值

您没有显示您的实际代码,如语法错误等所证明-您的问题的唯一逻辑解释是您没有将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());
  }
}

在声明部分定义一个字符串变量为Public例如,我们有一个名为"frmOne"的表单

公共字符串strVar = string. empty;

现在,将"frmOne"的TextBox的值赋给从那里获取TextBox值的变量

for example

strVar = Textbox1.Text.ToString();

现在在另一种形式中比如"frmTwo",你可以访问"frmOne"文本框的值就像这样(你想要获取值的地方):

frmOne frm = new frmOne();
string strValue = frm.strVar;       

那么,最后,strValue的frmTwo的局部变量包含了frmOne的Textbox的值

您正在创建一个NEW form1,其中文本框可能是空白的,并在该空表单上调用GetPass()。您需要一个已经打开的form1的实例,其中的文本框可能有一个值。

因为每次调用GetPass()时都创建了一个新的Form1实例

您需要以某种方式获得打开的form1的实例,并在其上调用GetPass:

form1.GetPass();

如果没有详细说明form1form2的创建顺序,您可以使用以下命令来获取form1的实例:

foreach (Form openedForm in Application.OpenForms) {
    if (openedForm.GetType() == Form1) {
        MessageBox.Show(openedForm.GetPass());
    }
}

返回空,因为您正在创建表单的新实例。假设Form1已经在某个地方打开,您需要检索Form1的现有实例并从中提取值。

嗨,你可以这样写:

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