8

テキストボックスに入力されたすべての文字を大文字に変更したいと思います。コードは文字を追加しますが、キャレットを右に移動するにはどうすればよいですか?

private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
{
    textBox3.Text += e.KeyChar.ToString().ToUpper();
    e.Handled = true;
}
4

6 に答える 6

18

CharacterCasingのプロパティを に設定しTextBoxますUpper。手動で処理する必要はありません。

入力キャレットが文字列の途中にある場合でもtextBox3.Text += e.KeyChar.ToString().ToUpper();、新しい文字が文字列の末尾に追加されることに注意してください(ほとんどのユーザーは非常に混乱するでしょう)。同じ理由で、文字を入力した後、入力キャレットが文字列の最後に表示されるとは想定できません。

それでもコードでこれを行いたい場合は、次のようなものが機能するはずです。

// needed for backspace and such to work
if (char.IsControl(e.KeyChar)) 
{
    return;
}
int selStart = textBox3.SelectionStart;
string before = textBox3.Text.Substring(0, selStart);
string after = textBox3.Text.Substring(before.Length);
textBox3.Text = string.Concat(before, e.KeyChar.ToString().ToUpper(), after);
textBox3.SelectionStart = before.Length + 1;
e.Handled = true;
于 2009-07-24T14:19:01.250 に答える
13
            tbNumber.SelectionStart = tbNumber.Text.ToCharArray().Length;
            tbNumber.SelectionLength = 0;
于 2010-03-22T19:06:27.110 に答える
2
private void txtID_TextChanged(object sender, EventArgs e)
{
    txtID.Text = txtID.Text.ToUpper();
    txtID.SelectionStart = txtID.Text.Length;
}
于 2012-08-13T07:01:26.410 に答える
1

これにより、挿入ポイントの場所が保持されます(ただし、個人的には Fredrik Mörk による回答を使用します)

private void textBox3_KeyPress(object sender, KeyPressEventArgs e)    
{        
    int selStart = textBox3.SelectionStart;
    textBox3.Text += e.KeyChar.ToString().ToUpper();        
    textBox3.SelectionStart = selStart;
    e.Handled = true;  
}

SelectionStart は、実際には SelStart と呼ばれる可能性があります。現時点では、手元にコンパイラがありません。

于 2009-07-24T14:23:15.520 に答える
1

これを手動で行う必要がある場合は、次を使用できます

private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
{
    textBox3.Text += e.KeyChar.ToString().ToUpper();
    textBox3.SelectionStart = textBox3.Text.Length;
    e.Handled = true;
}

ただし、上記のコードでは、テキストの末尾に新しい文字が挿入されます。カーソルのある場所に挿入したい場合:

private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
{
    int selStart = textBox3.SelectionStart;
    textBox3.Text = textBox3.Text.Insert(selStart,e.KeyChar.ToString().ToUpper());
    textBox3.SelectionStart = selStart + 1;
    e.Handled = true;
}

このコードは、カーソル位置に新しい文字を挿入し、新しく挿入された文字の左側にカーソルを移動します。

しかし、私はまだ CharacterCasing を設定する方が良いと思います。

于 2009-07-24T14:24:39.650 に答える
0

もう 1 つの方法は、KeyChar 自体の値を変更することです。

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e) {
        if ((int)e.KeyChar >= 97 && (int)e.KeyChar <= 122) {
            e.KeyChar = (char)((int)e.KeyChar & 0xDF);
        }
    }

ただし、CharacterCasing プロパティを使用するのが最も簡単な解決策です。

于 2009-07-24T15:56:11.763 に答える