2017-01-02 5 views
0

一部の文字が大文字ではなく、他の文字は大文字にならないようにしようとしています。特定の文字を除いて、文字列のすべての文字を大文字に変換します。

たとえば、テキストボックスに何かを書き込むと、自動的にすべての文字が大文字に書き込まれますが、文字「k」を入力するたびに小文字にする必要があります。

これを達成する方法を知っている人はいますか?

private void textBox3_TextChanged(object sender, EventArgs e) 
{ 
    // Navn/Name Text Box 


} 
+0

実際にWPF、Winformsの、ASP.NET、Silverlightの、など – bradbury9

+0

であれば、私はより多くを考えるならば、人々が簡単に知ることができますので、私は、質問には「WinFormsの」タグを追加する次の時間を提案重要な部分は文字列を変更し、結果をテキストボックスに書き込まないことです。だから、私は 'winforms'タグが必要であるとは思っていませんでした。 – wkl

+0

@wklうん、それは私が質問が広すぎると言っている理由です。それは2つの質問をする。最初の文字は「文字列の文字の大文字/小文字を選択的に変更するにはどうすればよいのですか?」、もう1つは「ユーザーが入力中にWinFormsのテキストボックスでテキストを変更する方法は?私はまた、両方の質問が別々に求められていることもかなり確信しています。 – CodeCaster

答えて

3

。ユーザーが中断されないように入力中
あなたはカーソル位置(選択)を覚えておく必要があります:

private void textBox3_TextChanged(object sender, EventArgs e) 
{ 
    int start = textBox3.SelectionStart; 
    int length = textBox3.SelectionLength; 
    textBox3.Text = textBox3.Text.ToUpper().Replace("K", "k"); 
    textBox3.SelectionStart = start; 
    textBox3.SelectionLength = length; 
} 

注:これはのWindows.Formsのためです。私はwpfまたはaspまたは他のUIフレームワークの部分は、カーソルの処理と異なると推測します。

2

ここに1つのアプローチあなたtextBox3_TextChangedイベントハンドラあなたは、単に「正しい」のテキストと戻ってそれを設定することができて

private void textBox3_TextChanged(object sender, EventArgs e) 
{ 
    textBox3.Text = new string(textBox3.Text.Select(x => x == 'k' || x == 'K' ? 'k' : char.ToUpper(x)).ToArray()); 
} 
-1

無効な入力をユーザーに許可したくない場合は、TextChangedイベント(その他の回答)を使用するか、KeyDownおよびKeyUpイベントを処理できます。他のアプローチについては、このリンクをチェックしてください。

https://msdn.microsoft.com/en-us/library/ms171537(v=vs.110).aspx

+1

いいえ、入力確認にKeyDownイベントとKeyUpイベントを使用しないでください**。マウスを使用してテキストを変更したり(コンテキストメニューを使用して切り取りまたは切り取り)、キーボードやマウスを使用するよりも、コントロールの内容を変更する方法があります。 – CodeCaster

0
  1. まず、あなたはキャレット位置に保つ - あなたのカーソルがあります。
  2. 次に、新しい文字列を計算します.1文字でない場合に条件を抽出しました。
  3. 最後に、新しい文字列を保存し、キャレットをその位置に戻します。

    private static bool CalculateConditionForLowerCase(string stringLetter) 
    { 
        return stringLetter.ToLower() == "k"; 
    } 
    
    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
        if (string.IsNullOrEmpty(textBox1.Text)) 
        { 
         return; 
        } 
        var caretPosition = textBox1.SelectionStart; 
        var sb = new StringBuilder(); 
        foreach (var letter in textBox1.Text) 
        { 
         var stringLetter = letter.ToString(); 
         sb.Append(CalculateConditionForLowerCase(stringLetter) ? stringLetter.ToLower() : stringLetter.ToUpper()); 
        } 
        textBox1.Text = sb.ToString(); 
        textBox1.SelectionStart = caretPosition; 
    } 
    
関連する問題