Dynamische Variablennamen in VB.Net?
Chris
- programmiertechnik
Hi,
ich hab folgendes Problem:
Ich arbeite an einem VB.Net Programm, welches Rechnungen generiert. Auf Wunsch soll das Prog auch mehrere Seiten generieren können. Dafür soll bei Klick auf "Neue Seite" einfach eine neue Seite hinzugefügt werden und die dafür benötigten Textfelder erstellt und benannt werden.
Ich könnte alles in der Entwicklungsumgebung vorbereiten und auf Visible setzen und dann bei Klick auf Neue Seite alles anzeigen lassen, bei 80 Feldern pro Formular dauert das aber ewig und macht die .exe nur unnötig groß.
Deshalb wollte ich eine Funktion für den "Neue Seite" Button schreiben, der die neue Seite erstellt und die dazugehörigen Textfelder.
Das ganze sieht bis jetz so aus:
=========================================================================
Public Function form_add(ByVal startFeld As Integer, ByVal endFeld As Integer, ByVal posY As Integer, ByVal scrollpos As Integer)
Dim temp_panelvar As New Panel
With temp_panelvar
.Parent = Me.Panel1
.Height = 1167
.Width = 830
.BackgroundImage = System.Drawing.Image.FromFile("./briefkopf_rechnung.jpg")
.Location = New System.Drawing.Point(28, posY - scrollpos)
.Visible = True
End With
Return temp_panelvar
End Function
======================================================================
Funktioniert soweit auch ganz gut, nur is jetz das Problem mit der Textfelderstellung.
Der Name für ein Textfeld soll zum Beispiel lauten: art_48_bez
Eine For-Schleife soll solche Textfelder erstellen.
Deswegen müsste das ganze aber so aussehen:
Dim art_ & i & _bez = New TextBox
Natürlich funktioniert das so nicht.
Ich müsste einfach nur wissen, wie man solche dynamischen "Variablen" generieren lässt?
Wie stelle ich das am besten an?
Danke für euere Hilfe
Chris
Wie in fast jedem Fall ist hier die Verwendung eines Arrays bzw. einer Liste zu empfehlen.
In deinem Fall erscheint mir System.Collections.Generic.List ganz sinnvoll.
Pack in dein Formular mit dem Neue Seite-Button einfach ein
Public seitenliste As New System.Collections.Generic.List(Of Panel)
(Ich glaube, du wolltest mehrere Panels?) und schreib in das Klick-Event des Buttons etwas in diese Richtung:
Private Sub NeueSeite(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_NeueSeite.Click
Dim pnl_Seite as New Panel
[...]
seitenliste.Add(pnl_Seite)
End Sub
Fürs durchlaufen der Liste kannst du einfach ein
For Each pnl_aktuelleSeite As Panel In seitenliste
pnl_aktuelleSeite.Foo = Bar
[...]
Next
verwenden.
Ich hoffe, ich konnte helfen.