7
votes

Comment puis-je mettre en évidence le texte dans une zone de texte dans un programme C # Winforms?

J'ai un programme C # Winforms avec plusieurs boîtes de texte. J'ai utilisé les propriétés de chaque case pour placer du texte en eux, expliquant à l'utilisateur quelle valeur les va. Je veux que le texte souligne chaque fois qu'un utilisateur sélectionne cette case. Par clic de tabulation ou de souris. Je n'aurai pas à le faire s'il y a un moyen d'afficher quelle valeur va dans la zone de texte quelque part en dehors de celui-ci.

J'ai essayé la méthode textbox.Sélectionnez mais elle n'avait aucun effet. La même chose avec Ce . P >

Voici un Capture d'écran de mon programme. P> Mon code: P>

    private void grapplingText1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
    {
        grapplingText1.SelectionStart = 0;
        grapplingText1.SelectionLength = grapplingText1.Text.Length;


5 commentaires

Si vous avez essayé deux solutions ... la seconde devrait avoir travaillé ... cela pourrait être un bogue dans le code. Pourriez-vous s'il vous plaît fournir le code que vous avez réellement utilisé?


J'ai posté le code. Faites-moi savoir si cela suffit pour continuer.


Une solution vous a donc aidée avec ce que vous vouliez réaliser?


J'ai pu finir avec des étiquettes, mais j'ai depuis ajouté les filigranes.


Le lien vers la capture d'écran est cassé.


7 Réponses :


7
votes

Je pense que .select fonctionnera si vous connaissez le montant du texte que vous souhaitez sélectionner.

essayer .selectall (); Cela devrait fonctionner pour vous


0 commentaires

3
votes

Vous devez utiliser le textebox.focus () pour obtenir la mise au point de votre contrôle, et si cela ne fonctionne pas automatiquement, appelez simplement la méthode Selectallall () sur l'événement Entrée ().

public partial class CustomTextBox : TextBox {
    public CustomTextBox() 
        : base() {
        this.Enter += new EventHandler(Enter);
    }

    protected virtual Enter(object sender, EventArgs e) {
        this.SelectAll();
    }
}


1 commentaires

Double-cliquez sur l'événement Entrée () dans la liste des événements de la fenêtre de la propriété pour chaque zone de texte vous permettra d'écrire la ligne de code dans le gestionnaire d'événements Textbox1_enter () et de propager la fonctionnalité de Selectall () sans trop d'effort. Donc oui, pour chaque zone de texte.



2
votes

Supposons que votre nom de TextBox soit 'MyTextBox' em>

Vous pouvez écrire la méthode pour gérer l'événement de mise au point: P>

this.MyTextBox2.GotFocus += new System.EventHandler(this.MyTextBox_GotFocus);
this.MyTextBox3.GotFocus += new System.EventHandler(this.MyTextBox_GotFocus);
this.MyTextBox4.GotFocus += new System.EventHandler(this.MyTextBox_GotFocus);
//...


4 commentaires

Oui, au moins, j'ai fait un test avec ce code et ça marche bien =)


Je remplace toutes les instances de MyTextBox avec les noms de mes boîtes de texte réelles, non?


Droite, MyTextBox n'est que le nom que j'ai choisi, tout comme un exemple. Mais vous n'avez pas besoin de changer le nom de la méthode myTextbox_gotfocus.


J'irais vraiment avec le filigrane comme Matt suggéré alors de faire la dure avec les événements. J'ai mis à jour ma publication comment vous devriez le faire et cela semble vraiment le meilleur moyen (en tant que complément d'utilisation étiquette / info-bulle )



2
votes

Typiquement, si vous voulez expliquer à l'utilisateur ce qui se passe dans une zone de texte, vous placez un Label contrôle directement au-dessus de celui-ci (ou sur le côté).

Parfois, cependant, pour sauvegarder l'écran immobilier, vous pouvez mettre une description du texte à l'intérieur de la zone de texte elle-même. Ceci s'appelle un Watermark .


3 commentaires

Eh bien, les boîtes de texte affichent actuellement des descriptions de texte en eux, voilà ce que vous entendez par un filigrane?


Le filigrane est comme un texte intégré que vous n'aurez pas à prendre en charge lorsque l'utilisateur tente de taper des objets dans cette zone de texte. Il apparaît toujours lorsque la zone de texte est vide et qu'il est parti quand il y a du texte à l'intérieur.


À droite. Un bon exemple du filigrane est la zone de recherche de recherche dans le coin supérieur droit de Stackoverflow. L'inconvénient du filigrane est que vous ne pouvez pas dire quelle est la valeur supposée vouloir dire quand elle est remplie. En regardant votre capture d'écran, je devrais recommander que vous utilisiez des commandes d'étiquettes, placées directement au-dessus des zones de texte.



8
votes

Que diriez-vous d'affecter ToolTip à Textbox et mettez tout le "Talk quelle textbox est pour" à l'intérieur?

Il suffit de glisser-déposer info-bulle à l'intérieur du formulaire. Et ensuite dans chaque TEXTBOX Propriétés Vous devez avoir une entrée supplémentaire dans la section MISC ToolTip sur ToolTip1 (ou quoi que ce soit le nom du nom sera si vous le renommez) .

alors lorsque l'utilisateur planant sur textbox (lecture seule / désactivée textbox ne semble pas afficher des info-bulles) et s'arrête là-bas pendant 1 seconde info-bulle Afficher avec des informations appropriées.

Vous pouvez éventuellement être éventuellement mieux avoir une étiquette à côté de textbox disant ce qui est, mais ayant un tooltip est également une bonne idée d'expliquer plus d'informations à l'utilisateur à travers cela.

Pour faire des trucs de filigrane, vous n'êtes pas obligé d'aller très loin en fixant les événements, en prenant soin de Selectall et que vous pourriez le faire comme ça. Créez un nouveau fichier watermark.cs et remplacez-le par ce code. Assurez-vous d'avoir changé d'espace de noms pour correspondre à l'espace de noms de votre programme. xxx

dans votre formulaire, vous l'activez comme ceci: xxx > Il reste là aussi longtemps que la zone est vide. Lorsque les utilisateurs entrent dans textbox le texte disparaît. Il apparaît à nouveau lorsque textbox est nettoyé (par utilisateur ou automatiquement). Pas besoin d'événements spéciaux, etc.

EDIT:

J'ai également ajouté la classe interne WatermarkToxtbox qui vous donne une option permettant d'utiliser simplement la nouvelle WATERMARMTEXBOX qui devient disponible en concepteur. Puis faites glisser-la glisser sur votre concepteur et utilisez-le. Il se comporte comme une zone de texte normale vous donne simplement un champ WatermarkMarkText supplémentaire.

Je préfère toujours la première méthode. Ne vous fait pas reconstruire votre interface graphique.


3 commentaires

J'ai essayé et l'erreur que j'ai été indiquée: Les méthodes d'extension doivent être définies dans une classe statique de niveau supérieur; TextboxwatermarkexensionMethod est une classe imbriquée ce que je fais mal? De plus, .Setwatermark ne figure pas sur l'autocomplete.


Je suppose que de cette erreur, que vous avez mis la classe d'extensions à l'intérieur d'une autre classe. Vous ne pouvez pas faire cela. Ce doit être une classe de haut niveau. Une fois que vous faites cela, et cela compile, puis Setwatermark se présentera dans IntelliSense.


J'ai modifié le code de sorte que vous puissiez simplement créer une nouvelle classe (cliquez sur Explorateur de solutions, puis cliquez avec le bouton droit de la souris sur votre programme, puis ajoutez-le -> CLASSE. Remplacez tout ce qui s'y remplace avec le code. Changer l'espace de noms Watermark pour correspondre à l'espace de noms de votre programme.



0
votes

Le moyen le plus simple de montrer certaines informations supplémentaires lors de la navigation sur un élément serait d'utiliser une info-bulle. J'ai essayé une approche de filigrane similaire mais ayant trouvé qu'il n'y a pas de moyen immédiat de la mettre en œuvre, l'info-bulle semblait être une alternative appropriée.

Vous pouvez voir comment la mettre en œuvre au lien suivant: Implémentation d'une info-bulle


1 commentaires

Vérifiez ma réponse pour une manière immédiate de mise en œuvre du filigrane. Facile à mettre en œuvre et à utiliser.



-1
votes

J'ai constaté que dans ma demande, la fixation de la méthode de surbrillance à l'accent -> Saisir l'événement ne fonctionnait pas bien avec la méthode SelecTall (). J'ai plutôt utilisé Action -> Cliquez sur (ce que je crois que fonctionne uniquement pour les souris) et attaché ma méthode de mise en évidence là-bas. Maintenant, ça marche comme un charme.


0 commentaires