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 に答える