2011-02-07 6 views
3

양식에 DataGridview가 있습니다. 이고 그리드에 4 개의 열이 있습니다 - 아니요, 대답, 키, 결과. 아니요, 키 및 결과 열은 읽기 전용입니다. 이 열에 일부 데이터를 입력하지 않을 것임을 의미합니다. 하지만 응답 열에 값을 입력합니다. 값은 A, B, C, D 및 E 일 수 있습니다. 예를 들어 X 키를 누르면 셀에 X가 표시되지 않습니다. keypress 이벤트가있는 텍스트 상자를 사용하여 작업 할 수 있습니다.DataGridiView 셀에 특정 문자 만 허용

이제는 어떻게 대답 할 수있는 셀 이벤트의 키 누르기 이벤트를 사용할 수 있습니까?

답변

3

EditingControlShowing 이벤트를 DataGridView으로 사용하면이 작업을 수행 할 수 있습니다.

이 이벤트의 이벤트 핸들러에서 데이터 격자에 데이터를 입력 할 때마다 표시되는 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에 의지 그리드의 모든 셀에 대해 항상 '주'텍스트 상자 컨트롤 텍스트 상자를 사용하는 경우 이벤트가 처음 발생하는지 확인해야합니다.
DataGridView에 읽기 전용이 아닌 다른 열이 있고 사용자가 제한되지 않은 데이터를 입력하려는 경우이 방법이 적합하지 않습니다. (현재 셀이 속하는 열의 OnKeyPress 이벤트 핸들러를 체크인하지 않는 한).

(소문자 a, b, c도 고려해야합니다.)

관련 문제