web-dev-qa-db-ja.com

テキストボックスに入力中にテキストを大文字に変換する

Visual Studioを初めて使用し、Visual Studio 2008を使用しています。プロジェクトでは、ShiftキーやCaps Lockを押さずにユーザーが入力したテキストをすべて大文字にする必要があります。私はこのコードを使用しました

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

ただし、Enterキーを押すと文字が大文字になります。

Shiftキーを押さずに、またはCaps Lockをオンにせずに、ユーザーが入力するときに文字が大文字で表示されるようにします。

合計ページコードは...

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();

    }
}

いずれかの解決策があれば、私を案内してください。

19
MUKESH BAFNA

これには特定のプロパティがあります。 CharacterCasing と呼ばれ、Upperに設定できます。

  TextBox1.CharacterCasing = CharacterCasing.Upper;

ASP.NETでは、これをテキストボックススタイルに追加しようとすることができます

  style="text-transform:uppercase;"

ここに例を見つけることができます: http://www.w3schools.com/cssref/pr_text_text-transform.asp

41
Steve

編集(ASP.NETの場合)

質問を編集した後は、ASP.NETを使用していることになります。状況はかなり異なります(その場合、サーバーへのラウンドトリップは推奨されないため)。 JavaScriptでも同じことができますが(toUpperCase()でグローバリゼーションを処理するのは面倒かもしれません)、CSSクラスを使用できます(ブラウザーの実装に依存)。このCSSルールを宣言するだけです:

.upper-case
{
    text-transform: uppercase
}

テキストボックスに大文字のクラスを追加します。

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

一般(旧)回答

ただし、Enterキーを押すと文字が大文字になります。

そのコードをどこに置くかによります。たとえば、TextChangedイベントに入力すると、入力時に大文字になります。

必要なことを正確に行うプロパティがあります:CharacterCasing

TextBox1.CharacterCasing = CharacterCasing.Upper;

多かれ少なかれ動作しますが、ロケールをうまく処理しません。たとえばドイツ語で ß は SS 大文字に変換すると( InstitutfürDeutsche Sprache )、このプロパティはそれを処理しません。

CharacterCasingプロパティを模倣して、KeyPressイベントハンドラーにこのコードを追加できます。

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

残念ながら、.NETフレームワークはこれを適切に処理せず、大文字のsharp sがそのまま返されます。の大文字バージョン ß 存在し、それは  また、「SS」を含む単語と「SS」を含む別の単語は、「SS」を使用して大文字に変換すると区別できないなど、混乱を招く可能性があります。 それを忘れないでください

ただし、2010年に、大文字を使用して地理的な名前を記述する場合、公式の文書では大文字のsharpの使用が必須になりました。

この微妙な.NETローカリゼーションのバグをサポートするための適切なコードを追加しない限り、できることはあまりありません。私があなたに提供できる最善のアドバイスは、サポートする必要のある各文化ごとのカスタム辞書を使用することです。

最後に、この変換はユーザーにとって混乱を招く可能性があることを忘れないでください。たとえば、トルコでは、2つの異なるversionsがあります。 i 大文字。

アプリケーションでテキスト処理が重要な場合、ワープロのようにサポートするロケールごとに専用のDLLを使用して多くの問題を解決できます。

カルチャ固有の問題に対処する必要がある場合、私は通常文字列に標準の.NET関数を使用しないにします(不変カルチャのテキストに対してのみ保持します)。必要なすべて(文字のカウント、変換、比較)の静的メソッドと、サポートされている各言語の多くの特殊な派生クラスを使用して、Unicodeクラスを作成します。実行時に、静的メソッドは現在のスレッドカルチャ名を使用して、辞書から適切な実装を選択し、それに作業を委任します。スケルトンは次のようなものです。

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];
    }
}

その後、ドイツ語に固有の実装があります。

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

真の実装はかなり複雑かもしれません(すべてのOSが大文字をサポートしているわけではありませんẞ)が、概念実証として使用してください。 .NETでのUnicodeの問題に関するその他の詳細については、 この投稿 も参照してください。

8
Adriano Repetti

プロジェクトでLinqToObjectsを使用できる場合

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

LINQを使用できない場合(たとえば、プロジェクトのターゲットFWは.NET Framework 2.0)

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

なぜ Text_Changedイベント?

フレームワークには、ユーザー入力イベントはほとんどありません。

1-)OnKeyPressedは、ユーザーがキーを押して離した後にキーボードからキーを押すと起動します(動作を開始します)

2-)OnKeyDownは、ユーザーがキーを押しながらキーボードからキーを押すと起動します

3-)OnKeyUpは、ユーザーがキーボードからキーを押し、キーがリリースを開始したときに起動します(ユーザーはキーから指を離します)

ご覧のとおり、3つすべてはキーボードイベントに関するものです。ユーザーがテキストボックスにデータをコピーして貼り付ける場合はどうでしょうか。

これらのキーボードイベントのいずれかを使用すると、ユーザーがキーボードを使用する場合にのみコードが機能します。たとえば、ユーザーがマウスクリックでスクリーンキーボードを使用するか、キーボードイベントで実装されたコードが実行されないデータをコピーペーストする場合は動作しません)

そのため、幸いなことに、別の回避策があります:Text Changed event ..

Text Changedイベントは、データの送信元を気にしません。コピーペースト、タッチスクリーンタップ(電話やタブレットなど)、仮想キーボード、マウスクリックでのスクリーンキーボード(銀行操作によっては、より多くのセキュリティ、またはあなたのユーザーが標準のキーボードを押すことができない障害者であるかもしれません)またはコード注入;)..

どんなに !

Text Changedイベントは、コンポーネントコンポーネントの領域に変更があるかどうかだけを気にします(ここでは、Your TextBox's Text area)またはない..

変更が発生した場合、テキスト変更イベントで実装したコードが機能します。

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

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