2011-12-20 9 views
1

私は英数字のみを許可するカスタムTextBoxコントロールに取り組んでいます。 KeyPress、KeyUpイベントの文字を制限していないことに注意してください。コピー/ペーストやその他の操作を制限したくないので、一般的に許可する必要があります。私はペースト操作時に英数字以外の文字をトリミングしています。しかし、デスクトップアプリケーションの経験がほとんどないので、私が書いたコードが良いか悪いかはわかりません。C#Winforms:この単純なカスタムテキストボックスコードを改善する方法はありますか?

using System; 
using System.Windows.Forms; 
using System.Text.RegularExpressions; 

namespace SaintThomas.UserControls 
{ 
    class TextBoxForUserName : TextBox 
    { 
     protected override void OnTextChanged(EventArgs e) 
     { 
      base.OnTextChanged(e); 

      this.SuspendLayout(); 
      int startPos = this.SelectionStart; 
      if (Regex.IsMatch(this.Text, "[^0-9_A-Z]", RegexOptions.IgnoreCase)) 
      { 
       int reduceStartPos = this.Text.Length; 
       this.Text = Regex.Replace(this.Text, "[^0-9_A-Z]", "", RegexOptions.IgnoreCase); 
       startPos = (startPos <= 0) ? 0 : startPos - (reduceStartPos - this.Text.Length); 
       if (this.Text.Length < startPos) 
       { 
        startPos = this.Text.Length; 
       } 
       this.SelectionStart = startPos; 
      } 
      this.ResumeLayout(); 
     } 
    } 
} 
+2

[コードレビュー](http://codereview.stackexchange.com/) – V4Vendetta

+0

ちょっと、コードレビューは優れたアイデアです。この投稿をCode Reviewに直接切り替えることができますか、または私はそれを再投稿する必要がありますか? –

答えて

4

これを行う最良の方法は、MaskedTextBox controlを使用することです。

車輪を作り直す必要はありません。

+2

MaskedTextBoxは任意の数の文字を許可するか、または固定マスクのみを許可しますか?私はOPが探しているものではない、後者だと思った。 –

+0

私は全く同意しますが、MaskedTextBoxのPromptCharプロパティを持たない可変長の英数字を許可することは可能ですか? –

0

一見すると、最初のifの状態は、それを残しておけば同じことをするので全く必要ないようです。

+0

はい。あなたが正しいです。正しい入力があった場合にSelectionStartプロパティを設定したくないので、そのまま保存しました。私がテストを完了し、それが現在のポジションに影響しないと確信すれば、私はそれを削除します。 –

関連する問題