2008-10-30 7 views
0

possible en double:
Watermarked Textbox for Compact FrameworkDrawString sur une zone de texte

l'aide de Visual Studio 2008 SP1, le dernier cadre Compact et Windows Mobile 5.

-je utiliser pour DrawString mettre une chaîne sur un TextBox. Mais dès que je dessine la chaîne, le contrôle TextBox vient de l'écrire. (Je sais parce que j'ai dessiné légèrement le bord du contrôle et mon texte est à moitié visible (où est hors de contrôle) et à moitié parti (où il est sur le contrôle.)

Y at-il de toute façon je peux obtenir le TextBox à ne pas actualiser afin que je puisse garder mon texte là

NOTE: J'ai regardé dans Subclassing TextBox et juste l'avoir peindre mon texte Cependant, les événements Paint pour la classe TextBox ne sont pas attrayants dans le CompactFramework. un moyen de pouvoir peindre sur la zone de texte sans les événements de peinture alors j'aimerais sous-classe la classe TextBox.

--Fin de Question--

Juste au cas où vous vous demandez pourquoi je dois faire ceci, voici ce que je suis en train de travailler: J'ai besoin d'une zone de texte où une valeur numérique doit être entrée deux fois. J'ai besoin d'une sorte d'indice clair qu'ils doivent entrer à nouveau le numéro. Je voudrais avoir un texte légèrement grisé sur la boîte de texte indiquant à l'utilisateur de ré-entrer.

J'ai essayé d'utiliser une étiquette, une étiquette de lien hypertexte et une autre zone de texte, mais ils masquent le texte ci-dessous (qui a une valeur par défaut qui doit être partiellement visible).

Si quelqu'un sait d'une manière différente la queue pour la rentrée ce serait aussi génial!

Vacano

+0

Vous pouvez modifier votre question d'origine. Mais si vous devez * re-demander, supprimez d'abord le précédent et ne polluez pas votre titre avec des références à celui-ci. – Shog9

+0

Voir http://stackoverflow.com/questions/174796/watermarked-textbox-for-compact-framework – arul

Répondre

1

Vous pouvez résoudre ce problème différemment. Il semble que vous souhaitiez découper leur entrée précédente de sorte qu'ils doivent la saisir à nouveau.

Je ne sais pas ce que les CF ont fait récemment mais s'il existe un RichTextBox alors cette méthode fonctionnera. Sinon, vous devrez écrire votre propre implémentation en commençant par un contrôle de base.

  1. Définissez le texte de la zone RichTextBox sur la valeur de la silhouette, mais définissez la couleur du texte en gris pour tous les caractères.
  2. Capturez les événements de touche et, lorsqu'ils appuient sur la touche correcte, changez la couleur du texte pour ce caractère en le plaçant du gris au noir et supprimez cette touche et appuyez sur, puis ignorez toutes les autres touches.

Cette solution ne fonctionnera pas si vous souhaitez les autoriser à quitter la réservation, par exemple un texte de forme libre. Au lieu de se défausser de ce qu'ils ont tapé s'ils ont tapé ou entré un personnage différent, vous ne rejetez pas la touche, mais vous effacez les caractères gris actuels et restants, ce qui leur permet de taper sans silhouette.

1

Comme je l'ai répondu dans la dupe fermée de ce:

Où faites-vous le DrawText? Sur le parent TextBox? Si oui, alors ce serait un comportement attendu.Pourquoi ne pas créer un contrôle TextBox personnalisé qui peint (en remplaçant OnPaint) la valeur la première fois, peut-être dans quelque chose comme un gris clair, puis la deuxième fois le peint à nouveau en noir?

Questions connexes