2011-02-07 18 views
3

私はフォーム上にdatagridviewを持っています。 グリッドには、No、Answer、Key、Resultの4つの列があります。 いいえ、キーと結果の列は読み取り専用です。 これは私がこれらの列に何らかのデータを入力しないことを意味します。 しかし、私は答えの列に値を入力します。 値は-A、B、C、D、Eのみになります。 たとえばXキーを押すと、Xがセルに表示されません。 私はkeypressイベントのテキストボックスでそれを行うことができます。DataGridiViewセルに特定の文字のみを許可する

今、私はそれを実現するために、回答列セルイベントのキー押しイベントを使用することができます。

答えて

3

DataGridViewEditingControlShowingイベントを使用してこれを行うことができます。

このイベントのイベントハンドラでは、データグリッド内にデータを入力するたびに表示されるTextboxにアクセスできます。
これは、この時点で、あなたが表示されているテキストボックスのKeyPressイベントにイベントハンドラを添付することができますことを、意味:

 private bool _firstTime = true; 

     private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
     { 
      if(!_firstTime) 
      { 
       return; 
      } 

      _firstTime = false; 

      var t = e.Control as TextBox; 

      if(t != null) 
      { 
       t.KeyPress += OnKeyPress; 
      } 
     } 

     private void OnKeyPress(object sender, KeyPressEventArgs e) 
     { 
      if(e.KeyChar != 'A' && e.KeyChar != 'B' && e.KeyChar != 'C') 
      { 
       e.Handled = true; 
      } 
     } 

DataGridViewのは、グリッド内のすべてのセルのため、常に「シェア」TextBoxコントロールをするので、テキストボックスを使用する場合は、初めてイベントが発生したかどうかを確認する必要があります。
DataGridViewに読み込み専用でない他の列があり、制約のないデータを入力する場合は、この方法は適していません。 (OnKeyPressイベントハンドラを現在のセルが属する列にチェックインしない限り)。

(小文字のa、b、cも考慮する必要があります)

関連する問題