【问题标题】:How to create a C# class that contains an array of textboxes?如何创建包含文本框数组的 C# 类?
【发布时间】:2013-06-21 23:28:36
【问题描述】:

我编写了以下代码在 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;

        }
    }
}

【问题讨论】:

标签: c# arrays class textbox vb.net-to-c#


【解决方案1】:

问题出在这里:

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

Visual Basic will automatically create a default instanceForm1 用于 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;
        }
    }

    // ...

【讨论】:

  • 谢谢 Reed,我仍在消化 C# 中的这个“非自动”默认实例。我将 "using System.Windows.Forms;" 添加到 TextBoxData 类中,并在表单上将 textBoxes Modifiers 属性从 private 更改为 public .有了这个,编译器就不再抱怨了。现在,由于类构造函数将 Form1 作为参数。如何创建 TextBoxData 类的实例?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    相关资源
    最近更新 更多