2

让我先说我对 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)”行得到“方法必须有返回类型错误”,在 Form2 frm = new Form1(this); 线

另外,如果我将 getter 属性放在 Form1 中,我会收到关于声明 2 个具有相同名称的对象的错误。找不到任何声明 TextBox1 的地方,除了在后面的代码末尾声明为

public System.Windows.Forms.TextBox TxtBox1

如果我把getter放在下面,我得到一个唯一的赋值、调用等可以用作语句错误

4

2 回答 2

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

}
于 2013-03-02T22:28:48.170 回答
0

也许我遗漏了一些东西,但是该方法FillBy需要两个参数,第一个是DataTable要填充,第二个是Name,所以将其更改为:

this.TBMainTableAdapter.FillBy(Me.ProjectDataset.TBName, Name);

有一个参数的方法是TBMainTableAdapter.Fill(DataTable table)

编辑:忽略了您在 Form2 上,但TextBox正如 Nikola 指出的那样,在 Form1 上,这当然是一个重要的事实。我保留这个答案,因为无论如何它可能会有所帮助。

于 2013-03-02T22:28:58.120 回答