2013-03-20 23 views
7

DataGridViewセルにユーザー入力を制限することは可能ですかRegEx?たとえば、セルの入力形式を[0-9]{2}に設定すると、ユーザーは2桁以外の何かを入力できません。DataGridViewユーザー入力を制限する

更新 申し訳ありませんが、わかりませんでした。私はCellValidationイベントを知っていて、ユーザー入力後に入力値を確認できます。しかし、の前に間違ったユーザー入力を防止できるかどうかは疑問ですこのイベント。私は、セルの正規表現が[0-9]のときにユーザーが文字を入力できないことを意味します。それは可能ですか?

+1

そのような入力値を制限するとき、それは "マスク"と呼ばれます:[this](http://stackoverflow.com/questions/6411511/datagridview-mask-values-in-column) –

+0

を参照してくださいWinFormsでうまく動作しないjavascript/jQuery –

+0

@pawlakpppを使用する必要があります:) –

答えて

8

入力時に無効な値が表示されないようにするには、EditingControl.KeyPressイベントを処理できます。以下のサンプルコード。ただし、正規表現を変更して不完全な値を許可する必要があります。また、データをグリッドに取り込む他の方法(コピー貼り付けなど)があるので、適切な検証を使用する必要があります。

private string pattern = "^[0-9]{0,2}$"; 

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     dataGridView1.EditingControl.KeyPress -= EditingControl_KeyPress; 
     dataGridView1.EditingControl.KeyPress += EditingControl_KeyPress; 
    } 

    private void EditingControl_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (!char.IsControl(e.KeyChar)) 
     { 
      Control editingControl = (Control)sender; 
      if (!Regex.IsMatch(editingControl.Text + e.KeyChar, pattern)) 
       e.Handled = true; 
     } 
    } 
+0

正常に動作します。ブリリアント! – fat

1

@Ginosaji、あなたのコードは良いのですが、editingControl.Text + e.KeyCharでユーザーがコントロールのテキストの末尾に最後の文字を入力することを想定しています。ユーザーがコントロールの途中でcharを配置するとどうなりますか?

関連する問題