8

DataGridViewによってセルへのユーザー入力を制限することは可能RegExですか?たとえば、セル入力の形式をこのようなものに設定[0-9]{2}して、ユーザーが2桁以外のものを入力できないようにします。

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

4

2 に答える 2

9

無効な値が入力されるのを防ぎたい場合は、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;
        }
    }
于 2013-03-20T12:33:10.887 に答える
1

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

于 2014-03-26T13:50:03.117 に答える