VB Control mit namen ansprechen aus schleife...

Maggo13

Grünschnabel
Hy,

ich habe ein benutzerdefiniertes Control (CTLMF). Dies habe ich mehrmals in ein Formular eingefügt. CTLMF1, CTLMF2, ... (in eine Tabelle).

Nun möchte ich diesen über eine Schleife Werte zuweisen.

Im CTLMF steht die Variable "public test as date".

Gebe ich den Code

CtlMF1.test = Today

im Formular ein, erkennt es die Variable test und es gibt keine Fehlermeldung.

Versuche ich es nun mit

Dim ctlName As String = "CtlMF" & zaehler
dim cl1 as control
cl1 = tablekalender.controls(ctlName)

erkennt das Programm bei

cl1. nicht das test. Und sagt "test" ist kein member von windows.forms.control...

Mache ich da was falsch?

Gruß
Marco
 
Alle Steuerelement sind von Control abgeleitet.

Was du aus der ControlCollection bekommst ist erstmal die Beschreibung des Basis Objektes, du müsstest dieses Objekt nun noch nach deinem Control casten.

Glaube in VB geht das mit DirectCast.

P.S.: Und bitte Code Tags verwenden ;)
 
Alle Steuerelement sind von Control abgeleitet.

Was du aus der ControlCollection bekommst ist erstmal die Beschreibung des Basis Objektes, du müsstest dieses Objekt nun noch nach deinem Control casten.

Glaube in VB geht das mit DirectCast.

P.S.: Und bitte Code Tags verwenden ;)

Danke für die Antwort... :)

Diese Idee hatte ich auch schon. Nur weiß ich leider nicht wie ich dieses control casten soll. Bin Anfänger. :)

Gruß
Maggo13
 
Bei dem von Spyke genannten Link wäre ein Beispiel gewesen, so schwierig ist's ja nun auch wieder nicht:
Code:
Dim ctlName As String = "CtlMF" & zaehler
dim cl1 as CTlMF
cl1 = tablekalender.controls(ctlName)
Bemerkung: Funktioniert nur, wenn Option Explicit auf "Off" in der Entwicklungsumgebung gesetzt ist. Dies ist für VB aber die Grundeinstellung. Wenn du mehr Erfahrung hast solltest du das dann auf "On" stellen um Fehler zu vermeiden. Dann wird aber zwingend ein TypeCast benötigt (bei der Off-Einstellung macht das Visual Studio für dich). Mit TypeCast sieht der Code dann wie folgt aus:
Code:
Dim ctlName As String = "CtlMF" & zaehler
dim cl1 as CTlMF
cl1 = DirectCast(tablekalender.controls(ctlName),CtlMF)
 
Zuletzt bearbeitet:
Erstmal vielen Dank. Klappt nun. Das Beispiel hatte ich mir angesehen und natürlich auch probiert. Nur mein Fehler war, das ich die Variable cl1 weiter so deklariert habe:

Code:
dim cl1 as control

statt

Code:
dim cl1 as ctlMF

Dient aber das Option Strict = On nicht dafür um Fehler zu vermeiden? Aber vielleicht stelle ich es wirklich auf Off. Kann es ja je Modul zum testn auf On setzen.

Gruß
Marco
 

Neue Beiträge

Zurück