首先我要说的是,我对 C# 非常陌生,我正在将程序从 VB.net 转换为 C#。
我正在使用 Visual Studio 2012
并运行 SQL Server 2008R2
好的,我有一个表单,Form1。此表单上有一个用户可以填写的文本框,TextBox1。现在我想使用文本框中的信息作为变量从数据库中提取信息并填充不同表单(form2)上的文本框(textbox2),这是我当前在表单2上使用的代码
private void form2_Load(object sender, EventArgs e)
{
string Name = Form1.TextBox1.Text;
this.TBMainTableAdapter.FillBy(Name);
}
我也尝试过像这样加载它:
this.TBMainTableAdapter.FillBy(Form1.TextBox1.Text);
这两个都给我“非静态字段需要对象引用......错误”
在 VB.Net 中,这要容易得多,我这样编码,并且运行得很好。
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.TBMainTableAdapter.FillBy(Me.ProjectDataset.TBName, TextBoxName.Text)
End Sub
后面的代码中是否缺少某些内容?我尝试更改文本框上的代码
来自
public System.Windows.Forms.TextBox TextBox1;
到
public static System.Windows.Forms.TextBox TextBox1;
虽然这清除了拉取变量时的错误,但它在表单 1 的代码隐藏中引发了更多错误,即“无法使用实例访问,给它一个名称类型”错误
更改后面代码中的所有错误是否值得。更重要的是,这是正确的方法吗?
好的,所以我在下面添加了这 2 个
public partial class Form1 : Form
Form1 form1;
public Form2(Form1 frm)
{
form1 = frm;
}
Form2 frm = new Form1(this);
我在“Public Form2(Form1 frm)”行收到“方法必须有返回类型错误” 和 Form2 处的“错误 Namespace.Form1 没有采用 1 个参数的构造函数” frm = new Form1(this);线
此外,如果我将 getter 属性放入 Form1 中,则会收到有关声明 2 个同名对象的错误。找不到声明 TextBox1 的任何地方,除了在后面的代码中,它在后面的代码的最后声明为
public System.Windows.Forms.TextBox TxtBox1
如果我把 getter 放在它下面,我得到的只是赋值、调用等可以用作语句错误
最佳答案
您需要在 Form2 对象中引用 Form1,才能使用 Form1 中的控件内容。此外,您的 textBox1 应该声明为 public,或者您应该为其创建 getter 属性。您可以使用很多东西,但如果 Form2 中需要 Form1,那么您可以做的最简单的事情就是通过 Form2 的构造函数传递 Form1 的引用。
Form1 form1;
public Form2(Form1 frm)
{
form1 = frm;
}
为 Form1 中的 textBox1 添加 getter 属性:
public TextBox TextBox1
{
get
{
this.textBox1;
}
}
您可以从 Form1 方法调用此构造函数,如下所示:
From2 frm = new Form2(this);
然后你可以调用:
private void form2_Load(object sender, EventArgs e)
{
string Name = form1.TextBox1.Text;
this.TBMainTableAdapter.FillBy(Name);
}
关于c# - 如何捕获文本框的值并将其用作变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15180151/