2017-05-13 4 views
-1

J'essaie d'implémenter une fonction de zoom avant/arrière dans une zone de texte enrichie (entrée). J'ai essayé de faire l'incrément de zoom par '1' mais il est trop grand et fait grandir le texte à une taille massive en 3-4 clics. Maintenant, je suis en train de mettre la valeur ajoutée à « 0,5 » pour augmenter la précision du zoom, mais elle donne l'erreur suivante:Augmentation de ZoomFactor d'une zone de texte enrichi par une valeur décimale

CS0266 - Cannot implicitly convert type 'double' to 'float'. An explicit conversion exists (are you missing a cast?)

Mon code:

private void ts_ZoomIn_Click(object sender, EventArgs e) 
    { 
     if (entry.ZoomFactor < 64.5) 
     { 
      entry.ZoomFactor = entry.ZoomFactor + 0.5; 
     } 
    } 

    private void ts_ZoomOut_Click(object sender, EventArgs e) 
    { 
     if (entry.ZoomFactor > 0.515625) 
     { 
      entry.ZoomFactor = entry.ZoomFactor + -0.5; 
     } 
    } 

Je suis sûr qu'il ya un solution simple pour cela, mais j'ai été perplexe avec cette erreur pour la dernière demi-heure et ne trouve pas de réponses.

+2

Utilisez '0.5f' au lieu de' 0.5' et ainsi de suite. –

Répondre

2

Vous obtenez le message car évidemment entry.ZoomFactor est un float et 0.5 est un double. Le message d'avertissement vous indique qu'il n'existe pas de conversion implicite mais qu'il existe un transtypage explicite. Qu'est-ce que cela signifie, c'est que le compilateur ne convertira pas 0.5 à un flottant pour vous implicite/automatiquement. Cependant, vous pouvez jeter 0,5 à un flotteur comme celui-ci:

entry.ZoomFactor = entry.ZoomFactor + (float) 0.5; 

En réalité, lorsque la double et le flotteur sont exploités ensemble, le flotteur est automatiquement converti en un double, mais pas vice versa. En réalité, le résultat de entry.ZoomFactor + 0.5 est un double. Ainsi, le casting suivant serait aussi probablement travailler:

entry.ZoomFactor = (float)(entry.ZoomFactor+ 0.5); 

Mieux encore, vous pouvez éviter la distribution comme l'un des commentateurs a montré et juste faire 0,5 naturellement un seul flotteur de précision en l'appelant 0.5f.

entry.ZoomFactor = entry.ZoomFactor + 0.5f; 

Enfin, étant donné que entry.ZoomFactor est une valeur l valide, vous pouvez probablement utiliser l'opérateur + =.

entry.ZoomFactor += 0.5f;