2009-08-18 6 views
1

Je ne veux pas utiliser le rendu de texte compatible, mais je ne veux pas utiliserpropriété UseCompatibleTextRendering pas créé par le designer quand il est défini sur false

Application.SetCompatibleTextRenderingDefault(false); 

Naturellement, je pensais que tout ce que je devais faire a été mis chaque propriété UseCompatibleTextRendering de chaque label à false. Le Concepteur de formulaires, cependant, semble générer uniquement du code pour définir la propriété si UseCompatibleTextRendering est défini sur true.

Aucun problème, je pensais, cela doit signifier que UseCompatibleTextRendering est initialisé à false par défaut. Pourtant, quand je commence ma forme, voilà, je vois laidTextRendering Compatible. Alors, une question:

1) Pourquoi diable n'est pas le concepteur en ajoutant le code pour UseCompatibleTextRendering quand je l'ai mis à faux et il est quand je l'ai mis à true, si le défaut est vrai?

Répondre

5

Le concepteur n'ajoute pas de code pour définir UseCompatibleTextRendering à false, car false est la valeur par défaut. Par conséquent, pourquoi les contrôles utilisent-ils le rendu de texte compatible par défaut, si la valeur par défaut de la propriété est false, cela semble être ... impair? Eh bien, la méthode Application.SetCompatibleTextRenderingDefault attribue la valeur donnée à un champ statique dans la classe Control, et le constructeur statique de la classe Control initialise ce champ à true. Par conséquent, si vous supprimez la ligne Application.SetCompatibleTextRenderingDefault(false);, l'application utilisera un rendu de texte compatible, contrairement à ce que vous pourriez penser en fonction de la valeur par défaut de la propriété UseCompatibleTextRendering.

La seule solution raisonnable que je peux voir est de simplement laisser l'appel généré automatiquement à Application.SetCompatibleTextRenderingDefault où il est.

+0

Merci. Pourquoi Control.UseCompatibleTextRenderingDefault est initialisé à true me déroute. –

3

Le problème est survenu dans un Com-Interop DLL je l'ai écrit pour une utilisation dans Microsoft Excel.

La DLL est écrit dans VB.NET et contient un formulaire qui est affiché à l'intérieur Excel.

Maintenant, le Excel.Application définit le UseCompatibleTextRendering par true par défaut. Par conséquent toutes les étiquettes et tous les boutons du formulaire s'affichent mal si la DLL est incorporée dans Excel (GDI + -Graphics-Class) mais parfaitement à l'intérieur de toute .Net-Windows Application.

Pour corriger cela, j'ai dû boucler sur toutes les étiquettes et les boutons et définir le UseCompatibleTextRendering à false sur Form.Load événement. Je n'ai trouvé aucun moyen d'utiliser le SetCompatibleTextRenderingDefault ni dans la DLL ni dans Excel.

+0

Modifier: La même chose se produit si vous créez une application de console et référencez la DLL pour afficher un formulaire Windows. – Markus

Questions connexes