2016-09-18 8 views
1

私は電話番号の自動書式設定を実装しようとしているテキストボックスを持っています。C#最後の2文字をテキストボックスから削除する

ユーザーが削除キーを押して、テキストボックス内の文字列の最後の文字が'-'の場合は、最後の2文字を削除します。

私は部分文字列の削除によってこれを実行しようとしていますが、運がありません。ありがとう

private void phoneNumberTextBox_KeyDown(object sender, KeyEventArgs e) 
     { 
      if (e.KeyCode == Keys.Back) 
      { 
       if (phoneNumberTextBox.Text.Length != 0) 
       { 
        if (Convert.ToChar(phoneNumberTextBox.Text.Substring(phoneNumberTextBox.Text.Length - 1)) == '-') 
        { 
         phoneNumberTextBox.Text.Substring(0, phoneNumberTextBox.Text.Length - 2); 
        } 
       } 
      }  
+1

http://www.visual-basic-tutorials.com/Tutorials/Controls/MaskedTextBox.html – Slai

答えて

2

Substring()新しい文字列インスタンスを返し、現在のインスタンスを変更しません。このため、あなたの呼び出しは新しい一時的な文字列を作成するだけですが、何もしないのですぐに破棄されます。

変更スティックを作るために、あなたがそうのように、戻ってテキストボックスにSubstring()の結果を代入する必要があります。

phoneNumberTextBox.Text = phoneNumberTextBox.Text.Substring(0, 
    phoneNumberTextBox.Text.Length - 2); 

は、短い文字列を扱うの問題を回避するために、あなたが最初の文字列の長さをチェックしていることを確認します(2文字未満)。

また、テキストボックス内の文字数を制限する場合は、代わりにMaxLengthプロパティを使用してください。あなたは長さを扱い、そのようにタイプすることに対処する必要はありません。 2文字の削除を行う可能性があるため

+0

これは魅力的でした!ありがとう。今私は、操作が完了したときにテキストカーソルがテキストボックスの先頭に移動する問題があります。 –

+0

@AlexEdwardsこれは文字列を短くしたために起こります。キャレットは無効な位置にあり、文字列の先頭に移動します。なぜあなたはテキストボックスの 'MaxLength'プロパティを設定しませんか? – xxbbcc

+0

@AlexEdwards私は「MaxLength」へのリンクを追加しました。 – xxbbcc

2

:キーを押す部分については

phoneNumberTextBox.Text = phoneNumberTextBox.Text.Remove(phoneNumberTextBox.Text.Length - 2, 2); 

は、フォームあなたにKeyPreviewのを有効にする必要があるかもしれません。

編集に間違いがあります。

関連する問題