Benutzer mit den meisten Antworten
Dim x as new List(of T)

Frage
-
Hallo Experten
ist es möglich ein Anzahl von Controls (z.B: Label1,Label2 etc) die zur Entwurfzeit erstellt wurden einer "List" bereits bei der Definition zu zuordnen?
Public xlaRang As New List(Of Label)
oder muss jedes Label mit .controls.add hinzugfügt werden ?
mfg eem monarch
- Bearbeitet Monarch-Falter Dienstag, 17. Januar 2012 18:23
Antworten
-
Hallo Monarch,
Elmar war schneller. Hier eine andere Lösung mit der .AddRange Methode:
Public Class Form1 Private lblList As New List(Of Label) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim l() As Label = {Me.Label1, Me.Label2} lblList.AddRange(l) End Sub End Class
Gruss Ellen
Ich benutze/ I'm using VB2008 & VB2010- Als Antwort markiert Monarch-Falter Mittwoch, 18. Januar 2012 08:18
-
Hallo,
das kannst Du mit Auflistungsinitialisierern erreichen.
Wenn die Label über den Designer erstellt werden,
kannst Du die Instanz frühestens nach InitializeComponent erzeugen,
denn vorher existieren sie (logischerweise) noch nicht:Dim labelList As List(Of Label) Public Sub New() InitializeComponent() labelList = New List(Of Control) From { Me.Label1, Me.Label2 } End Sub
(mit Zeilenumbrüchen nach freier Wahl ;-)
Im Hintergrund erzeugt dabei der Visual Basic Compiler eben jene Add Anweisungen,
die Du ansonsten wie gezeigt programmieren würdest.Gruß Elmar
- Als Antwort markiert Monarch-Falter Mittwoch, 18. Januar 2012 08:18
Alle Antworten
-
Hallo Experten
ist es möglich ein Anzahl von Controls (z.B: Label1,Label2 etc) die zur Entwurfzeit erstellt wurden einer "List" bereits bei der Definition zu zuordnen?
Hallo Monarch,
nein. Zur Entwurfzeit lässt sich im Designer keine List(of Label) erstellen. Aber programmatisch geht das realitiv einfach:
Public Class Form1 Private lblList As New List(Of Label) Private pt As New Point(0, 0) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For i As Integer = 0 To 9 lblList.Add(New Label) lblList(i).BackColor = Color.Aqua lblList(i).ForeColor = Color.Black lblList(i).BorderStyle = BorderStyle.FixedSingle lblList(i).Size = New Size(100, 20) lblList(i).TextAlign = ContentAlignment.MiddleLeft lblList(i).Location = pt lblList(i).Text = "Label" & i.ToString Me.Controls.Add(lblList(i)) pt.Y += 25 Next End Sub End Class
Ist das Deine Frage?
Was noch noch geht: Dynamisch ein erstelltes Label zur Liste hinzufügen:
lblList.Add(Label10) ggf weitere Eigenschaften. Voraussetzung ist, dass die Instanz Label10 existiert.
Gruss Ellen
Ich benutze/ I'm using VB2008 & VB2010 -
hi Ellen,
das ist mir klar, war auch nicht Frage, sorry. Die Frage ist ob es möglich ist eine Anzahl von Labels (Label1, Label2, etc) die zur Entwurfzeit erstellt wurden in einer Codezeile (Laufzeitcode) einer List zugeordnet werden können.
Public xlaRang As New List(Of Label) ... Public sub ... xlaRang.add(me.Label1) xlaRang.add(me.Label2) xlaRang.add(me.Label3) xlaRang.add(me.Label4) ...etc. end sub
Die Form besitzt ca. 40 Labels mit unterschiedliche Eigenschaften, die will ich nicht alle zur Laufzeit erstellen, das geht einfacher zur Entwurfzeit. Die Frage ist nun ob jedes einzelne Label über .add zur Liste hinzugefügt werden muss oder ob man das in einer Codezeile bei der Definition der Liste(xlaRang) erledigen kann
mfg eem monarch
-
Hallo,
das kannst Du mit Auflistungsinitialisierern erreichen.
Wenn die Label über den Designer erstellt werden,
kannst Du die Instanz frühestens nach InitializeComponent erzeugen,
denn vorher existieren sie (logischerweise) noch nicht:Dim labelList As List(Of Label) Public Sub New() InitializeComponent() labelList = New List(Of Control) From { Me.Label1, Me.Label2 } End Sub
(mit Zeilenumbrüchen nach freier Wahl ;-)
Im Hintergrund erzeugt dabei der Visual Basic Compiler eben jene Add Anweisungen,
die Du ansonsten wie gezeigt programmieren würdest.Gruß Elmar
- Als Antwort markiert Monarch-Falter Mittwoch, 18. Januar 2012 08:18
-
Hallo Monarch,
Elmar war schneller. Hier eine andere Lösung mit der .AddRange Methode:
Public Class Form1 Private lblList As New List(Of Label) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim l() As Label = {Me.Label1, Me.Label2} lblList.AddRange(l) End Sub End Class
Gruss Ellen
Ich benutze/ I'm using VB2008 & VB2010- Als Antwort markiert Monarch-Falter Mittwoch, 18. Januar 2012 08:18