2013-03-05 4 views
1

J'ai un champ de texte DB, taille 500, lié à un champ de dialogue MFC en utilisant un CRichEditCtrl. J'appelle CRichEditCtrl::LimitText(500) de sorte que vous ne pouvez pas entrer plus de texte que la DB peut gérer et cela fonctionne très bien, jusqu'à vous entrez les nouvelles lignes. Chaque nouvelle ligne augmente la longueur de la chaîne de 2, mais compte seulement comme 1 vers la limite de 500 ... par ex. si je remplis le contrôle d'édition à la limite et ai 4 nouvelles lignes, le CString a la longueur 504.CRichEditCtrl :: LimitText - problèmes avec les nouvelles lignes

Je veux spécifiquement que le contrôle laisse seulement l'utilisateur entrer le texte jusqu'à la limite de 500 char, plutôt que de tronquer ce qu'ils entrer. Comment puis-je le mieux y parvenir? Remarque, je dois enregistrer le contenu du CString tel quel, sans remplacer \r\n par \n dans la base de données ou quoi que ce soit de ce genre.

Répondre

1

Écrasez OnChar, comptez le nombre de nouvelles lignes dans le texte, puis définissez ctrl.LimitText(500 - count). De cette façon, vous évitez de dépasser la limite de caractères DBs 500.

Vous devez également surveiller en pâte qui pourrait briser la limite, comme décrit ici: How does a CRichEditCtrl know a paste operation has been performed?

+0

ont également besoin de recalculer la limite après une pâte, qui aurait dépassé la limite elle-même. – arx

+0

Droite. Je n'y ai pas pensé. – dwo

+0

Pouvez-vous (ou quelqu'un) ajouter un correctif pour ce cas? –

Questions connexes