Simplification de code [Résolu]

Signaler
Messages postés
156
Date d'inscription
vendredi 13 janvier 2006
Statut
Membre
Dernière intervention
2 mars 2009
-
Messages postés
156
Date d'inscription
vendredi 13 janvier 2006
Statut
Membre
Dernière intervention
2 mars 2009
-
Salut à tous,

J'ai un petit bout de code dans mon programme qui me parait pas très ... optimiser ou "propre" mais je ne trouve pas l'algorithme pour l'écrire plus correctement...

Avez vous une idée svp ? (les isBold, isItalic... sont des variables de type booleenes)

        If isBold And isItalic And isUnderline And isStrikeout Then
            'instruction
        ElseIf isItalic And isUnderline And isStrikeout Then
            'instruction
        ElseIf isBold And isUnderline And isStrikeout Then
            'instruction
        ElseIf isBold And isItalic And isStrikeout Then
            'instruction
        ElseIf isBold And isItalic And isUnderline Then
            'instruction
        ElseIf isBold And isItalic Then
            'instruction
        ElseIf isItalic And isUnderline Then
            'instruction
        ElseIf isUnderline And isStrikeout Then
            'instruction
        ElseIf isBold And isStrikeout Then
            'instruction
        ElseIf isBold Then
            'instruction
        ElseIf isItalic Then
            'instruction
        ElseIf isUnderline Then
            'instruction
        ElseIf isStrikeout Then
            'instruction
        End If

Merci d'avance

__________________________________________________________________________
Pensez à accepter les réponses qui vous servent  

13 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
ok ^^
en fait, tu cherches a combiner les flags
FontStyle.Bold Or FontStyle.Italic Or FontStyle.Underline Or FontStyle.Strikeout

simple, donc :

Dim eFlags As System.Drawing.FontStyle
If isBold Then
eFlags = FontStyle.Bold
End If
If isItalic Then
eFlags = eFlags Or FontStyle.Italic
End If
If isUnderline Then
eFlags = eFlags Or FontStyle.Underline
End If
If isStrikeout Then
eFlags = eFlags Or FontStyle.Strikeout
End If
myFont = New Font(LireNoeudEnfantXML(Path, "Option", "PoliceStyle"), CSng(LireNoeudEnfantXML(Path, "Option", "PoliceTaille")), eFlags)

au choix aussi, stocker la valeur résultante (eFlags) qui n'est au final qu'un numérique entier
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
si on met le tableau a l'horizontal, c'est peut etre plus clair :

fréquence 1
0101010101010101

fréquence 2
0011001100110011

fréquence 4
0000111100001111

fréquence 8
0000000011111111

on obtiens :

0101010101010101
0011001100110011
0000111100001111
0000000011111111

et on parcoure tous les cas de figure. (c'est un tableau logique, tel qu'on apprend a les construire en electronique)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
enreigstrer ces champs séparement est une bonne solution, au contraire, elle est ouverte...
en lisant le fichier XML, on ne voit pas un obscur 12 pour le style...
on voit underline, bold.... c'est parlant, c'est le but de l'XML, d'être parlant.

quant a la police, c'est bien le seul moyen... au framework de te créer a chaque fois une police logique répondant a tes parametres. si tu mentionne une font inexistante sur un poste, il en prendra une autre, pas grave.
reste que ca n'est faisable que si la font est recréée de toute pièce.

C'est un integer, et oui. On a combiné les flags.
c'est possible parce que leur valeurs sont des multiples de 2:
1, 2, 4 et 8

ainsi, si on à la valeur 13, on sait que c'est une combinaison de 1, 4 et 8

l'extraction de tel ou telle valeur est simple, il suffit de faire un Mask des bits, a l'aide de And :

(13 And 1) donne 1
(13 And 2) donne 0
(13 And 4) donne 4
(13 And 8) donne 8
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
pour le tableau logique, fait sur une feuille de papier pour s'assurer de couvrir tous les cas.
pas utile de passer par un tableau à deux dimensions ici...
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
quelles sont ces instructions ?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
sans compter que 2^4 = 16
donc tu devrais avoir 16 conditions, pas 13 ...
Messages postés
156
Date d'inscription
vendredi 13 janvier 2006
Statut
Membre
Dernière intervention
2 mars 2009

Salut,

Exact... il manque des conditions...

En gros il y a 4 variables de type booléennes et je voudrais couvrir toutes les possibilité de combinaisons de ces variables ( qui sont explicites avec leur noms...)

Est-ce clair ? je me suis compris moi

LC

__________________________________________________________________________
Pensez à accepter les réponses qui vous servent  
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
si tu me donnes les instructions, on pourra simplifier le truc.

sinon, c'est facile, considère un tableau de 4 colonnes, et donc, 16 lignes.

on fait varier chaque colonne (une par boolean) de 0 a 1 a 0 ... a un frequence differente. 1, 2, 4, 8 :

on a donc:
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Messages postés
156
Date d'inscription
vendredi 13 janvier 2006
Statut
Membre
Dernière intervention
2 mars 2009

Re,

Je ne voulais pas rendre mon message illisible, mais maintenant que tu as saisis ce que je recherche je te donne le complet:

        If isBold And isItalic And isUnderline And isStrikeout Then
            myFont =   New  Font(LireNoeudEnfantXML(Path,  "Option" , "PoliceStyle"), CSng(LireNoeudEnfantXML(Path, "Option""PoliceTaille")), FontStyle.Bold Or FontStyle.Italic Or FontStyle.Underline Or FontStyle.Strikeout)
        ElseIf isItalic And isUnderline And isStrikeout Then
            myFont  = New Font(LireNoeudEnfantXML(Path, "Option""PoliceStyle"), CSng(LireNoeudEnfantXML(Path, "Option""PoliceTaille")), FontStyle.Italic Or FontStyle.Underline Or FontStyle.Strikeout)
        ElseIf isBold And isUnderline And isStrikeout Then
            myFont =   New  Font(LireNoeudEnfantXML(Path,  "Option" , "PoliceStyle"), CSng(LireNoeudEnfantXML(Path, "Option""PoliceTaille")), FontStyle.Bold Or FontStyle.Underline Or FontStyle.Strikeout)
        ElseIf isBold And isItalic And isStrikeout Then
            myFont  = New Font(LireNoeudEnfantXML(Path, "Option""PoliceStyle"), CSng(LireNoeudEnfantXML(Path, "Option""PoliceTaille")), FontStyle.Bold Or FontStyle.Italic Or FontStyle.Strikeout)
        ElseIf isBold And isItalic And isUnderline Then
            myFont =   New  Font(LireNoeudEnfantXML(Path,  "Option" , "PoliceStyle"), CSng(LireNoeudEnfantXML(Path, "Option""PoliceTaille")), FontStyle.Bold Or FontStyle.Italic Or FontStyle.Underline)
        ElseIf isBold And isItalic Then
            myFont  = New Font(LireNoeudEnfantXML(Path, "Option""PoliceStyle"), CSng(LireNoeudEnfantXML(Path, "Option""PoliceTaille")), FontStyle.Bold Or FontStyle.Italic)
        ElseIf isItalic And isUnderline Then
            myFont =   New  Font(LireNoeudEnfantXML(Path,  "Option" , "PoliceStyle"), CSng(LireNoeudEnfantXML(Path, "Option""PoliceTaille")), FontStyle.Italic Or FontStyle.Underline)
        ElseIf isUnderline And isStrikeout Then
            myFont  = New Font(LireNoeudEnfantXML(Path, "Option""PoliceStyle"), CSng(LireNoeudEnfantXML(Path, "Option""PoliceTaille")), FontStyle.Underline Or FontStyle.Strikeout)
        ElseIf isBold And isStrikeout Then
            myFont =   New  Font(LireNoeudEnfantXML(Path,  "Option" , "PoliceStyle"), CSng(LireNoeudEnfantXML(Path, "Option""PoliceTaille")), FontStyle.Bold Or FontStyle.Strikeout)
        ElseIf isBold And isUnderline Then
            myFont  = New Font(LireNoeudEnfantXML(Path, "Option""PoliceStyle"), CSng(LireNoeudEnfantXML(Path, "Option""PoliceTaille")), FontStyle.Underline Or FontStyle.Bold)
        ElseIf isItalic And isStrikeout Then
            myFont =   New  Font(LireNoeudEnfantXML(Path,  "Option" , "PoliceStyle"), CSng(LireNoeudEnfantXML(Path, "Option""PoliceTaille")), FontStyle.Italic Or FontStyle.Strikeout)
        ElseIf isBold Then
            myFont  = New Font(LireNoeudEnfantXML(Path, "Option""PoliceStyle"), CSng(LireNoeudEnfantXML(Path, "Option""PoliceTaille")), FontStyle.Bold)
        ElseIf isItalic Then
            myFont =   New  Font(LireNoeudEnfantXML(Path,  "Option" , "PoliceStyle"), CSng(LireNoeudEnfantXML(Path, "Option""PoliceTaille")), FontStyle.Italic)
        ElseIf isUnderline Then
            myFont  = New Font(LireNoeudEnfantXML(Path, "Option""PoliceStyle"), CSng(LireNoeudEnfantXML(Path, "Option""PoliceTaille")), FontStyle.Underline)
        ElseIf isStrikeout Then
            myFont =   New  Font(LireNoeudEnfantXML(Path,  "Option" , "PoliceStyle"), CSng(LireNoeudEnfantXML(Path, "Option""PoliceTaille")), FontStyle.Strikeout)
        ElseIf Not isBold And Not isItalic And Not isUnderline And Not isStrikeout Then
            myFont  = New Font(LireNoeudEnfantXML(Path, "Option""PoliceStyle"), CSng(LireNoeudEnfantXML(Path, "Option""PoliceTaille")))
        End If
je créer une nouvelle police selon chaque ca, c'est le seul moyen que j'ai trouvé pour stocker un police dans mon fichier d'initialisation de mon programme... je suis donc même prêt à tous changé si il existe une meilleur solution pour sauvegarder une police complète...

LC

__________________________________________________________________________
Pensez à accepter les réponses qui vous servent  
Messages postés
156
Date d'inscription
vendredi 13 janvier 2006
Statut
Membre
Dernière intervention
2 mars 2009

Re,

Sinon je n'arrive pas assimiler ton tableau ...

je comprends bien son shema mais l'histoire de la fréquence 1,2,4,8 ... là je n'y arrive pas...

dsl

LC

__________________________________________________________________________
Pensez à accepter les réponses qui vous servent  
Messages postés
156
Date d'inscription
vendredi 13 janvier 2006
Statut
Membre
Dernière intervention
2 mars 2009

Re,

Tout simplement parfait!!!!!

Je n'avais pas vu que fontstyle avait pour résultante un integer ....

Par je crois que ma méthode de base n'est pas terrible pour sauvegarder ma police... ( Nom, Taille, Couleur, style)

Je sauvegarde chaque paramètre dans un fichier XML puis j'extrait tout au chargement puis je passe le code ci-dessus... Connais tu une meilleure solution pour sauvegarder une police complete ?

LC

__________________________________________________________________________
Pensez à accepter les réponses qui vous servent  
Messages postés
156
Date d'inscription
vendredi 13 janvier 2006
Statut
Membre
Dernière intervention
2 mars 2009

Ah ok, super instructive ton explication du tableau je me l'enregistre dans un coin de ma mémoire celle là !!

Par contre comment réaliser tel tableau si j'avais voulu l'utiliser ?

Je sais créer des tableaux mais, là il y a 4 dimension plus cette incrémentation .... ca dépasse mes connaissances pour le moment et je suis très curieux d'apprendre de nouvelles choses.

LC

__________________________________________________________________________
Pensez à accepter les réponses qui vous servent  
Messages postés
156
Date d'inscription
vendredi 13 janvier 2006
Statut
Membre
Dernière intervention
2 mars 2009

Ok, merci beaucoup pour tes réponses.

__________________________________________________________________________
Pensez à accepter les réponses qui vous servent