2016-07-20 5 views
0

Ich habe eine Gruppe von 8 TextBoxes in einer WinForm und ich habe ein Objekt-Array erstellt, damit sie enthalten sind. Bei der Initialisierung der Form möchte ich jede TextBox.text auf Environ("USERPROFILE") & "\Documents" setzen, um den Standard-Dateipfad für jede Box anzuzeigen. In diesen Feldern wird angezeigt, welche Datei basierend auf Benutzereingaben geladen werden soll.Gibt es eine Möglichkeit, meine bestehenden TextBoxen zu durchlaufen und jeden .Text zu definieren?

Derzeit sieht der Code wie folgt aus:

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 

Gibt es eine Möglichkeit ich kann es For-Schleife innerhalb einer betreiben (ähnlich unten, außer dies nicht funktioniert) jedes Feld zu definieren? So kann ich auch jedes Feld gleichmäßig ändern können, wie [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' ist fast immer die falsche Herangehensweise, da es die Objekte, die Sie versuchen zu verwenden. 'Dim TextBoxesList As TextBox() = ...' erstellt ein Array von Textboxen * und * ermöglicht den Zugriff auf Textbox-Eigenschaften – Plutonix

+1

@Plutonix Um dieses Array zu erstellen und zu definieren, würde 'TextBoxList als TextBox() = {TextBox1, TextBox2, [....]} 'Arbeit? Wenn ja, würde 'TextBoxesList (x) .text =" Text hier "auch funktionieren? – Munkeeface

+0

@Plutonix Nach der Verwendung von 'TextBoxesList (x) .text =" put text here "', bekomme ich eine Fehlermeldung, die besagt, dass "Value of Type System.Windows.Forms.Textbox nicht in Integer konvertiert werden kann". Weißt du, warum das der Fehler ist? (Entschuldigung, ich bin neu in Visual Studio von VBA, also bin ich noch nicht daran gewöhnt, Fehler zu entschlüsseln ...) – Munkeeface

Antwort

2

Speichern von bestimmten Arten As Object ist oft ein Fehler, da es die reale Art versteckt gespeichert werden:

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

Die resultierenden Array speichert Objekte Das verhindert den Zugriff auf TextBox-spezifische Eigenschaften. Beginnen Sie mit einem typisierten Array:

' 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 

Stored und iteriert As TextBox ermöglicht TextBox Eigenschaften leicht zugegriffen werden kann. Sie können auch nach Index:

For n As Int32 = 0 to TextBoxesList.Count-1 
    TextBoxesList(n).Text = "foo"   
Next 
Verwandte Themen