FontStyle syntaxe

Résolu
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 - 30 avril 2012 à 01:23
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 - 1 mai 2012 à 18:43
Bonjour,

Un petit probleme de syntaxe pour le FontStyle:

' Get the Font
Dim aName As String = "Verdana"
Dim aSize As Single = 18
Dim aStyle As String = "italic"
' myLabel.Font = New Font(aName, aSize, aStyle)
myLabel.Font = New Font(aName, aSize, CType([Enum].Parse(GetType(FontStyle), aStyle), FontStyle))


Pour info, ca marche, mais y-a-t-il plus simple que 'CType([Enum].Parse(GetType(FontStyle), aStyle), FontStyle)'?


J'ai essaye sans succes:
Dim aStyle As FontStyle = CType("italic", FontStyle)
myLabel.Font = New Font(aName, aSize, aStyle)

Alors que ce code ci-dessous marche:
myLabel.Font = New Font(aName, aSize, FontStyle.Italic)


Je suis un peu perdu au niveau de la syntaxe.
Merci,

A+
JLuc01

9 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 avril 2012 à 07:34
Bonjour,
ton premier essai, qui utilise une chaîne de caractères pour le style ne correspond pas à ce qu'attend VB.Net (un flag)
aStyle = "italic"
n'est pas du tout pareil à
aStyle = FontStyle.Italic
je ne connais pas VB.Net et ne sais donc pas quels sont les types de FontStyle.Italic, FontStyle.Bold, etc ...
Il me semble toutefois que j'essaierais de le déterminer (par des messageboxes), puis de me servir directement de leur valeur (probablement booléenne)
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
3
NHenry Messages postés 15114 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 mai 2024 159
30 avril 2012 à 14:55
Bonjour,

Pour le comprendre, il faut l'exploser :
CType(
[Enum].Parse(
GetType(
FontStyle
), 
aStyle
), 
FontStyle
)


Dans le bloc le plus profond (GetType), tu récupères le type correspondant à l'énumération.
Dans le bloc Parse, tu demandes à .NET de rechercher la valeur de l'énumération correspondants à la chaine.
Et enfin de CType, permet de typer correctement la sortie (Car le Parse est commun à toutes les énumérations).

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
3
NHenry Messages postés 15114 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 mai 2024 159
1 mai 2012 à 14:21
Bonjour,

CInt(GetType(FontStyle), aStyle)
Tout simplement parce que un entier ne peut pas avoir d'autre format que des nombres.
Donc, pour utiliser un nom, il faut impérativement faire appel à un enum.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
3
NHenry Messages postés 15114 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 mai 2024 159
30 avril 2012 à 02:48
Bonjour,

Si tu veux conserver le texte pour définir le style, je ne vois pas d'autres choix.
Tu peux, je pense, tout regrouper dans une fonction :
MaFonction("italic")

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 1
30 avril 2012 à 11:01
Bonjour,

En fait, je recupere le string "italic" d'un fichier XML et je veux donc l'utiliser.

NHenry, merci pour cette confirmation. Si je n'aime pas trop ce code, c'est simplement que j'ai un peu de peine a le comprendre.
Peut-etre moins maintenant.

ucfoutu, merci pour les precisions.
En fait, le flag est egal a ([Enum].Parse(GetType(FontStyle), aStyle) = 2, si je comprends bien.
Je crois que ce flag peut prendre des valeurs numeriques: 1(regular), 2(italic), 3(bold)... d'ou le [enum].
Je ne suis pas sur de ce que fait le Parse, que j'utilise rarement, voir jamais.

Le coup des MsgBox, c'est une bonne idee (a essayer ce soir), et a se souvenir a l'avenir.

Si toutefois, vous pouvez confirmer ou pas mes explications a propos de ce code ou me donner plus d'explication sur ce morceau de code, ce serait genial.
Je vais rejeter un oeil dans MSDN, peut-etre que je trouverais ce que je cherche.
Merci a tout les deux,

A+
JLuc01
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 avril 2012 à 11:11
Pourquoi ne "transposes-tu tout simplement pas, genre :
select case aStyle
  case "italic"
    bstyle = FontStyle.Italic
  case "bold"
    bstyle = FontStyle.Bold
  case "regular"
    bstyle = FontStyle.Regular
  '...
end select
myLabel.Font = New Font(aName, aSize, bstyle)


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
30 avril 2012 à 15:45
Salut

Dim aStyle As System.Drawing.FontStyle
aStyle = FontStyle.Regular
TextBox1.Font = New Font(aName, aSize, aStyle)
0
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 1
1 mai 2012 à 00:51
Bonsoir,

shayW, en fait la variable 'aStyle' contient uniquement 'Regular' (variable provenant d'un fichier XML). Donc, le code de ucfoutu semble le plus approprie. Ceci dit, mon code de depart est probablement le plus simple finalement. Pas besoin de tout reinventer quand c'est disponible en VBnet.

Mon probleme etait plus la comprehension de ce code, et je crois que NHenry l'explique tres bien en explosant ce code.

Toutefois, une derniere question concernant ce code avant de fermer ce post: pourquoi ne peut-on pas ecrire la ligne A ci-dessous au lieu de la ligne B?

A) aStyle = CType(CInt(GetType(FontStyle), aStyle), FontStyle) 'Ne marche pas!
B) aStyle = CType([Enum].Parse(GetType(FontStyle), aStyle), FontStyle)


Car finalement, ([Enum].Parse(GetType(FontStyle), aStyle) est egal a un nombre (1 pour Regular...) si j'ai bien compris: nombre ou integer ou single ou flag???
Ou peut-etre 'Integer.Parse(...' ferait l'affaire apres tout (non teste).

A+
JLuc01
0
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 1
1 mai 2012 à 18:43
Bonjour,

OK. Merci pour ces dernieres explications.
Je crois que je comprends mieux maintenant la syntaxe de ce code.

A+
JLuc01
0
Rejoignez-nous