6

私はこれを使用します:

Static PreviousLetter As Char
    If PreviousLetter = " "c Or TextBox1.Text.Length = 0 Then
        e.KeyChar = Char.ToUpper(e.KeyChar)
    End If
    PreviousLetter = e.KeyChar

しかし、結果は常に次のとおりです。

Good Night Every Body

文の最初の文字だけを大文字にし、他の単語は通常のままにするにはどうすればよいですか? 私が望む結果は次のとおりです。

Good night every body
4

7 に答える 7

11

前の文字を保持するために静的変数を使用しないでください。それは必要ではなく、一般的に悪い習慣です。

次に、あなたの質問からは少し不明ですが、 のテキストに変更を加えたいと仮定すると、変更TextBox1後にテキストを TextBox に戻す必要があるでしょう。

したがって、解決策は次のようになります。

 If TextBox1.TextLength > 1 Then
     TextBox1.Text = TextBox1.Text.Substring(0, 1).ToUpper() + TextBox1.Text.Substring(1)
 ElseIf TextBox1.TextLength = 1 Then
     TextBox1.Text = TextBox1.Text.ToUpper()
 EndIf

最初の文字を大文字にし、残りを小文字にしたい場合は、上記のコードを次のように変更できます。

 If TextBox1.TextLength > 1 Then
     TextBox1.Text = TextBox1.Text.Substring(0, 1).ToUpper() + TextBox1.Text.Substring(1).ToLower()
 ElseIf TextBox1.TextLength = 1 Then
     TextBox1.Text = TextBox1.Text.ToUpper()
 EndIf

アップデート

コメントに基づいて、この変更をその場で (つまり、ユーザーが TextBox に入力しているときに) 行う場合は、カーソルも操作する必要があります。基本的に、テキストを変更する前にカーソル位置を保存し、変更後に位置を復元する必要があります。

また、KeyUpイベントではなくイベントでこれらの変更を実行しKeyPressます。これKeyUpは、キーの押下に応じて TextBox が変更を登録した後に発生します。

 Dim startPos as Integer
 Dim selectionLength as Integer

' store the cursor position and selection length prior to changing the text
 startPos = TextBox1.SelectionStart
 selectionLength = TextBox1.SelectionLength

 ' make the necessary changes
 If TextBox1.TextLength > 1 Then
     TextBox1.Text = TextBox1.Text.Substring(0, 1).ToUpper() + TextBox1.Text.Substring(1).ToLower()
 ElseIf TextBox1.TextLength = 1 Then
     TextBox1.Text = TextBox1.Text.ToUpper()
 EndIf

 ' restore the cursor position and text selection
 TextBox1.SelectionStart = startPos
 TextBox1.SelectionLength = selectionLength
于 2013-12-31T16:28:34.800 に答える
6

TextInfo.ToTitleCaseメソッド 指定された文字列をタイトル ケースに変換します。

txtName.Text = Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(txtName.Text.ToLower)

最初にテキスト全体を小文字に変換する必要があります。そうしないと、期待どおりに機能しません。

(頭字語と見なされる、完全に大文字の単語を除く)

于 2017-02-06T15:58:58.500 に答える
1

あなたは間違いなくそれを行うことができます。

正規表現は最も直接的な方法です...あなたがしていることに似ており、それらを組み合わせることができます。

多くの人がすでにこれを見ています。これがその1つです:
C#を使用して文字列内の文をフォーマットする

Char.ToUpper の代わりにその正規表現文字列置換を使用してください。
または、すべてのテキストが入力されるまで待ってから、コントロールがフォーカスを失ったときなどに 1 回実行します。

于 2013-12-31T16:27:58.743 に答える