2015-07-22 1 views
0

Modifier: Total rééditer pour illustrer problème plus clairement:jeu champ objet via chaîne

Ne pense pas que cela fonctionnerait quand je l'ai fait:

Dim Label1 As Label 
    Dim testvar As String = "BottomRight" 
    Dim testalign As ContentAlignment 
    testalign = ContentAlignment.testvar 
    Label1.TextAlign = testalign 

« BottomRight » est l'un des choix innombrables que vous obtenez dans intellisense. Utilisation d'une chaîne car le code complet définit 'Label1.textalign' sur différentes configurations en fonction d'une variable de chaîne.

Clairement, ContentAlignment.testvar renvoie une erreur. Je dois préserver l'énumérable étant défini par une valeur de chaîne. Je n'arrive pas du tout à comprendre - les concepts avancent trop pour ma scène, mais y a-t-il un moyen d'y parvenir? Deux jours de recherche et de délier l'espoir ..

+0

Pourquoi utiliser une chaîne quand vous avez déjà une énumération? 'testvar = ContentAlignment.BottomRight: testalign = testvar' –

+0

Comme dans la publication - j'ai besoin d'utiliser une chaîne - le code complet implique que la chaîne soit tirée de l'ensemble de données et des alignements de texte sur les contrôles individuels définis à partir de ces chaînes. Ainsi, comme indiqué ci-dessus, besoin d'y parvenir via des chaînes. Mais merci pour la réponse et les excuses si ma terminologie est fausse/trompeuse – stigzler

Répondre

0

Enfin! Avec bouvillon de Sam, voici comment:

Dim Label1 As Label 
    Dim testvar As String = "BottomRight" 
    Dim testalign As New ContentAlignment 
    testalign = CType([Enum].Parse(GetType(ContentAlignment), testvar), ContentAlignment) 
    Label1.TextAlign = testalign 

Pas sûr que cela fonctionne pour toutes les classes - il ne pas color. Les valeurs énumérées sous ContentAlignment sont répertoriées en tant que constantes publiques - elles peuvent donc devoir être de ce type.

+1

Correct. Ce ** seulement ** fonctionne avec Enums. 'Color' est une structure. –

1

Si vous devez utiliser une variable de chaîne que vous avez deux options:

l'option d'un

Enum.Parse

option à deux

Select Case

Select Case testvar.Trim.ToLower 
    Case "bottomright" 
     testalign = ContentAlignment.BottomRight 

    Case .... 
End Select 
+0

Merci Sam. Essayait d'éviter la méthode Select Case car certaines parties du code final ont de longues listes de champs enum. Lisez un peu sur enum.parse - avez-vous un exemple de comment cela serait utilisé dans un scénario de questions? – stigzler

+0

C'est une méthode unique sur une classe. Je suis sûr que vous pouvez comprendre comment l'utiliser. –