0

我已经编写了以下代码来在 VB.NET 中实现这一点:

Public Class TBdata

    Public txtBox() As TextBox = {Form1.TextBox1, Form1.TextBox2, Form1.TextBox3, Form1.TextBox4}
    Public aTextBoxes(3) As String

    Public Sub DataToArray()
         For i As Integer = 0 To 3
             aTextBoxes(i) = txtBox(i).Text
         Next
    End Sub

End Class


'On the Form, to capture all entries in the text boxes

   Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim d As TBdata = New TBdata()
        d.DataToArray()

    Dim msg As String = ""
        For i As Integer = 0 To 3
            msg = msg & d.aTextBoxes(i) & " : "
        Next

        MessageBox.Show(msg)
    End Sub

现在,为什么这不能在 C# 中完成?

class TBdata
{
    public string[] aTextBoxes = new string[3];
    public TextBox[] txtBox = new TextBox[] { Form1.textBox1, Form1.textBox2, Form1.textBox3, Form1.textBox4 };

    public void DataToArray()
    {
        for (int i = 0; i < 4; i++)
        {
            aTextBoxes(i) = txtBox(i).Text;

        }
    }
}
4

2 回答 2

3

问题在这里:

public TextBox[] txtBox = new TextBox[] { Form1.textBox1, Form1.textBox2, Form1.textBox3, Form1.textBox4 };

Form1如果您在类中引用它,Visual Basic 将自动为 Windows 窗体创建一个默认实例。C# 不会创建此“自动”实例,因此您需要将实例显式传递给表单的构造函数,并从该实例加载文本框。

class TextBoxData
{
    public string[] aTextBoxes = new string[3];
    public TextBox[] TextBoxes { get; private set;}

    public TextBoxData(Form1 form)
    {
        this.TextBoxes = new TextBox[] { form.textBox1, form.textBox2, form.textBox3, form.textBox4 };
    }

    public void DataToArray()
    {
        for (int i = 0; i < TextBoxes.Length; i++)
        {
            aTextBoxes[i] = TextBoxes[i].Text;
        }
    }

    // ...
于 2013-06-21T23:33:46.077 回答
0

似乎您的 TBData 类在您的 c# 代码中是私有的。可见性关键字不存在,并且 c# 默认为私有,因此即使您添加正确的 using 语句以包含 TBData 命名空间,或者如果您在不同的文件或同一命名空间中编写其他代码,您将永远无法实例化类型的对象TB 数据。

同样在 c# 的代码示例中,您使用括号来访问数组中某个索引处的对象,这是 VB 的表示法。在 c# 中使用方括号 [] 访问索引,括号保留用于方法调用。

于 2014-10-23T15:44:36.990 回答