web-dev-qa-db-fra.com

Convertir le texte en majuscule lors de la saisie dans la zone de texte

Je suis nouveau dans Visual Studio et j'utilise Visual Studio 2008 . Dans un projet, je souhaite mettre tout le texte en majuscule en le saisissant par l'utilisateur sans appuyer sur la touche Maj ou le verrouillage majuscule .

TextBox1.Text = TextBox1.Text.ToUpper();

mais il met en majuscule les caractères après avoir appuyé sur la touche Entrée.

Je veux juste que les caractères apparaissent en majuscules lors de la frappe par l'utilisateur sans appuyer sur la touche Maj ou sans verrou majuscule.

Le code de page total est comme ...

public partial class Test : System.Web.UI.Page 
 {
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void TextBox1_TextChanged(object sender, EventArgs e)
    {
        TextBox1.Text = TextBox1.Text.ToUpper();

    }
}

Avez-vous une solution, veuillez me guider.

17
MUKESH BAFNA

Il y a une propriété spécifique pour cela. Il s’appelle CharacterCasing et vous pouvez le régler sur Upper

  TextBox1.CharacterCasing = CharacterCasing.Upper;

Dans ASP.NET, vous pouvez essayer d’ajouter ceci à votre style de zone de texte.

  style="text-transform:uppercase;"

Vous pouvez trouver un exemple ici: http://www.w3schools.com/cssref/pr_text_text-transform.asp

40
Steve

Modifier (pour ASP.NET)

Après avoir modifié votre question, vous utilisez ASP.NET. Les choses sont assez différentes là-bas (car dans ce cas, un aller-retour sur serveur est plutôt découragé). Vous pouvez faire la même chose avec JavaScript (mais gérer la globalisation avec toUpperCase() peut s’avérer difficile) ou vous pouvez utiliser des classes CSS (en s’appuyant sur l’implémentation des navigateurs). Déclarez simplement cette règle CSS:

.upper-case
{
    text-transform: uppercase
}

Et ajoutez la classe en majuscule à votre zone de texte:

<asp:TextBox ID="TextBox1" CssClass="upper-case" runat="server"/>

Réponse générale (ancienne)

mais il met en majuscule les caractères après avoir appuyé sur la touche Entrée.

Cela dépend où vous mettez ce code. Si vous le placez, par exemple, dans l'événement TextChanged, il se mettra en majuscule au fur et à mesure de la frappe.

Vous avez une propriété qui fait exactement ce dont vous avez besoin: CharacterCasing:

TextBox1.CharacterCasing = CharacterCasing.Upper;

Cela fonctionne plus ou moins, mais il ne gère pas très bien les paramètres régionaux. Par exemple en langue allemande ß est SS lors de la conversion en majuscule ( Institut für Deutsche Sprache ) et cette propriété ne gère pas cela.

Vous pouvez imiter la propriété CharacterCasing en ajoutant ce code dans le gestionnaire d'événements KeyPress:

e.KeyChar = Char.ToUpper(e.KeyChar);

Malheureusement, le framework .NET ne le gère pas correctement et les majuscules du caractère sharp s sont renvoyées telles quelles. Une version majuscule de ß existe et c'est  et cela peut créer une certaine confusion, par exemple, un mot contenant "ss" et un autre mot contenant "ß" ne peuvent pas être distingués si vous convertissez en majuscules avec "SS"). N'oublie pas ça :

Toutefois, en 2010, l’utilisation des dièses majuscules est devenue obligatoire dans les documents officiels lors de l’écriture de noms géographiques en majuscules.

Vous ne pouvez rien faire à moins d’ajouter du code approprié pour la prise en charge de ce problème (et d’autres) de bogues subtils dans la localisation .NET . Le meilleur conseil que je puisse vous donner est d'utiliser un dictionnaire personnalisé pour chaque culture à prendre en charge .

Enfin, n'oubliez pas que cette transformation peut être déroutante pour vos utilisateurs: en Turquie, par exemple, il existe deux versions différentes de i lettre majuscule.

Si le traitement de texte est important dans votre application, vous pouvez résoudre de nombreux problèmes en utilisant des DLL spécialisées pour chaque langue que vous prenez en charge, à l'instar du traitement de texte.

Ce que je fais habituellement est de ne pas utiliser les fonctions standard .NET pour les chaînes lorsque je dois traiter des problèmes propres à une culture (je ne les conserve que pour le texte) culture invariante). Je crée une classe Unicode avec des méthodes statiques pour tout ce dont j'ai besoin (comptage de caractères, conversions, comparaison) et de nombreuses classes dérivées spécialisées pour chaque langue prise en charge. Au moment de l'exécution, les méthodes statiques utiliseront le nom actuel de la culture de thread pour choisir la mise en œuvre appropriée dans un dictionnaire et y déléguer le travail. Un squelette peut ressembler à ceci:

abstract class Unicode
{
    public static string ToUpper(string text)
    {
        return GetConcreteClass().ToUpperCore(text);
    }

    protected virtual string ToUpperCore(string text)
    {
        // Default implementation, overridden in derived classes if needed
        return text.ToUpper();
    }

    private Dictionary<string, Unicode> _implementations;

    private Unicode GetConcreteClass()
    {
        string cultureName = Thread.Current.CurrentCulture.Name;

        // Check if concrete class has been loaded and put in dictionary
        ...

        return _implementations[cultureName];
    }
}

J'aurai alors une implémentation spécifique à l'allemand:

sealed class German : Unicode
{
    protected override string ToUpperCore(string text)
    {
        // Very naive implementation, just to provide an example
        return text.ToUpper().Replace("ß", "ẞ");
    }
}

La véritable implémentation peut être un peu plus compliquée (tous les systèmes d’exploitation ne prennent pas en charge les majuscules but) mais comme preuve de concept. Voir aussi cet article pour plus de détails sur les problèmes Unicode sur .NET.

8
Adriano Repetti

si vous pouvez utiliser LinqToObjects dans votre projet

private YourTextBox_TextChanged ( object sender, EventArgs e)
{
   return YourTextBox.Text.Where(c=> c.ToUpper());
}

Si vous ne pouvez pas utiliser LINQ (par exemple, le FW cible de votre projet est .NET Framework 2.0).

private YourTextBox_TextChanged ( object sender, EventArgs e)
{
   YourTextBox.Text = YourTextBox.Text.ToUpper();
}

Pourquoi Text_Changed Event? 

Il y a peu d'événements de saisie utilisateur dans le framework.

1-) OnKeyPressed se déclenche (commence à fonctionner) lorsque l'utilisateur appuie sur une touche du clavier après que la touche a été relâchée

2-) OnKeyDown se déclenche lorsque l'utilisateur appuie sur une touche du clavier lors de l'appui des touches

3-) OnKeyUp se déclenche lorsque l'utilisateur appuie sur une touche du clavier et que la touche commence à se relâcher (l'utilisateur retire son doigt de la touche)

Comme vous le voyez, tous les trois concernent l’événement de clavier..Alors qu’en est-il si l’utilisateur copie et colle des données dans la zone de texte?

si vous utilisez l'un de ces événements de clavier, votre code fonctionne alors que seul l'utilisateur utilise le clavier. Par exemple, si l'utilisateur utilise un clavier à l'écran avec un clic de souris ou un copier-coller, les données que votre code a implémentées dans les événements de clavier ne se déclenchent jamais (ne commence jamais à fonctionner). )

donc, heureusement, il existe une autre option pour contourner le problème: L’événement Text Changed ..

L'événement Text Changed importe peu à la provenance des données. Même s'il peut s'agir d'un copier-coller, d'un écran tactile (comme des téléphones ou des tablettes), d'un clavier virtuel, d'un clavier à l'écran avec des clics de souris (certaines opérations bancaires l'utilisent trop plus de sécurité, ou peut-être que votre utilisateur serait une personne handicapée qui ne peut pas appuyer sur un clavier standard) ou une injection de code;) ..

Peu importe !

L'événement Text Changed se soucie simplement de savoir s'il y a des changements avec sa zone de composant de responsabilité (ici, la zone Your TextBox's Text) ou pas.

En cas de changement, votre code implémenté sous événement de texte modifié fonctionne.

1
sihirbazzz
**/*Css Class*/**
.upCase
{
    text-transform: uppercase;
}

<asp:TextBox ID="TextBox1" runat="server" Text="abc" Cssclass="upCase"></asp:TextBox>
0
JIYAUL MUSTAPHA