让我先说一下我对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的代码隐藏中抛出了更多错误,“无法通过实例访问,给它一个名称类型”错误
更改后面代码的所有错误是否值得。更重要的是,这是正确的方法吗?
好的,所以我在
下添加了这两个public partial class Form1 : Form
Form1 form1;
public Form2(Form1 frm)
{
form1 = frm;
}
Form2 frm = new Form1(this);
我在“Public Form2(Form1 frm)”行中获得“方法必须有返回类型错误” 和 “错误Namespace.Form1没有一个带有1个参数的构造函数”在Form2 frm = new Form1(this);线
如果我将getter属性放在Form1中,我会收到一个关于声明具有相同名称的2个对象的错误。无法找到声明TextBox1的任何地方,除了在其背后的代码末尾声明的代码后面的代码
public System.Windows.Forms.TextBox TxtBox1
如果我把getter放在那个以下,我得到一个唯一的赋值,调用等可以用作语句错误
答案 0 :(得分:2)
您需要在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);
}
答案 1 :(得分:0)
也许我错过了一些东西,但方法FillBy
有两个参数,第一个是要填充的DataTable
,第二个是Name
,所以请将其更改为:
this.TBMainTableAdapter.FillBy(Me.ProjectDataset.TBName, Name);
带有一个参数的方法是TBMainTableAdapter.Fill(DataTable table)
。
编辑:忽略了你在Form2上,但正如Nikola所指出的那样TextBox
在Form1上,这当然是一个重要的事实。我保留这个答案,因为它可能会有所帮助。