2016-07-20 5 views
0

私はWinFormに8 TextBoxesのグループを持っており、それらを含むオブジェクト配列を作成しました。 Formの初期化では、TextBox.textをそれぞれEnviron("USERPROFILE") & "\Documents"に設定して、各ボックスのデフォルトのファイルパスを表示します。これらのボックスは、ユーザーの入力に基づいてどのファイルをロードするかを表示するために使用されます。私の確立されたテキストボックスをループし、各.Textを定義する方法はありますか?

現在のコードは次のようになります。

Public Sub New() 
    InitializeComponent() 

    BWGPTextBox.Text = Environ("USERPROFILE") & "\Documents" 
    BWBRTextBox.Text = Environ("USERPROFILE") & "\Documents" 
    ChGPTextBox.Text = Environ("USERPROFILE") & "\Documents" 
    ChBRTextBox.Text = Environ("USERPROFILE") & "\Documents" 
    CCGPTextBox.Text = Environ("USERPROFILE") & "\Documents" 
    CCBRTextBox.Text = Environ("USERPROFILE") & "\Documents" 
    PPGPTextBox.Text = Environ("USERPROFILE") & "\Documents" 
    PPBRTextBox.Text = Environ("USERPROFILE") & "\Documents" 
End Sub 

は、私はそれが各ボックスを定義するには(これは動作しませんを除いて、以下に類似)Forループ内で動作することができます方法はありますか?それが格納されている真の種別を隠蔽するので、私はまた、対象となる特定のタイプの格納[Excel.Application].[Excel.Workbook].Open(TextBoxesList(x).Text)

Public Sub New() 
    InitializeComponent() 
    Dim TextBoxesList As Object = {BWGPTextBox, BWBRTextBox, _ 
             ChBRTextBox, ChGPTextBox, _ 
             CCGPTextBox, CCBRTextBox, _ 
             PPGPTextBox, PPBRTextBox} 
    For Each x In TextBoxesList 
     TextBoxesList(x).GetType() ' = Environ("USERPROFILE") & "\Documents" 
    Next 
End Sub 
+1

「As Object」は、使用しようとしているオブジェクトを囲むので、ほとんど常に間違ったアプローチです。 'Dim TextBoxesList As TextBox()= ...'はテキストボックスの配列を作成する*と*はテキストボックスのプロパティにアクセスできるようにする – Plutonix

+1

@Plutonixこの配列を作成して定義するには 'Dim TextBoxesList As TextBox()= {TextBox1、 TextBox2、[....]} '仕事?もしそうなら、 'TextBoxesList(x).text ="ここにテキストを置く "はうまくいくでしょうか? – Munkeeface

+0

@Plutonix 'TextBoxesList(x).text ="ここにテキストを置く "の後、' Value of Type System.Windows.Forms.Textboxの値をIntegerに変換できません。 'というエラーが表示されます。なぜこれがエラーであるか知っていますか? (申し訳ありませんが、私はVisual StudioのVisual Studioを初めて使っているので、まだエラーを解読するのには慣れていません...) – Munkeeface

答えて

2

として、均一各ボックスを変更することができ、この方法は、多くの場合、間違いである:

Dim TextBoxesList As Object = {BWGPTextBox, BWBRTextBox, 
            ChBRTextBox, ChGPTextBox, 
            CCGPTextBox, CCBRTextBox, 
            PPGPTextBox, PPBRTextBox} 

得られた配列を格納するオブジェクトTextBox固有のプロパティにアクセスできなくなります。型指定された配列で開始:

' DECLARE the array at the form level: 
Private TextBoxesList As TextBox() 
.... 
' initialize it AFTER the constructor runs: 
TextBoxesList = {BWGPTextBox, BWBRTextBox, 
            ChBRTextBox, ChGPTextBox, 
            CCGPTextBox, CCBRTextBox, 
            PPGPTextBox, PPBRTextBox} 

' then loop: 
For Each tb As TextBox in TextBoxesList 
    tb.Text = "foo"   
Next 

を記憶しAs TextBoxTextBox特性が容易にアクセスすることを可能にする反復しました。

For n As Int32 = 0 to TextBoxesList.Count-1 
    TextBoxesList(n).Text = "foo"   
Next 
関連する問題