2012-02-15 4 views
1

내가있는 DataGridView를 사용하고, 어떤 장소에 내가 (예 : 텍스트 상자, 콤보 상자)에 컨트롤을 추가C#을 DataGridView에 키 처리

dataGridView1.Controls.Add(comboBox); 
comboBox.Focus(); 

문제는이 컨트롤을 사용하여 해당하고, 원인 ENTER를 사용하여 선택을 커밋보다 DataGridView 키를 "처리"- clickng 후 콤보 상자에서 sth을 선택하는 대신 datagridview에서 선택 변경 (다음 셀로 이동) 입력하십시오.

내가 사용 STH 좋아 :

public class MyDataGridView:DataGridView 
{ 
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if(keyData == Keys.Enter) 
     { 
      return true; 
     } 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
} 

그러나 그 DataGridView를 원인 및 콤보 상자가 입력하는 답변을하지 않으며, 다른 키 ...

추가 infromation : 나는 ComboBox 클래스를 사용해야합니다, 대신 DataGridViewCombobox에 대한 설명입니다. 아무도 내 comobox에서 ENTER를 처리하는 방법을 도울 수 있습니까?

+0

비슷한 문제를 해결하는 방법을 보여 주셨습니다. 내가 솔루션을 게시 [여기] (http://stackoverflow.com/questions/11108791/edit-a-textbox-cell-in-datagridview-as-if-it-were-a-normal-textbox-no-jumping- o) 우선 ProcessCmdKey에서 ENTER를 처리해야한다고 생각합니다. 나는 다른 방법을 찾지 못했다. – Dil

+0

해결 했습니까? ProcessCmdKey 메서드 내에서 조작 할 수 있도록 MyDataGridViewClass에서 ComboBox에 대한 참조를 보유 할 수 있다고 생각합니다. – Dil

답변

0

시도 :

if((keyData == Keys.Enter) && (MyComboBox.Focused)) 

그렇게 된 DataGridView가 당신의 통제에 초점이 맞춰 경우를 제외하고 ENTER를 응답합니다.

다음 코드는 상황에 맞는 잘 모르겠지만, 어쩌면 당신은 같은 것을 시도해 볼 수도 있습니다 : 그것은 필요로하는 경우,

public class MyDataGridView:DataGridView 
{ 
    public ComboBox MyComboBox { get; set; } //in case you had no other way to refer to it 

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if((keyData == Keys.Enter) && (MyComboBox.Focused)) 
     { 
      //commit choice logic 
      return true; 
     } 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
} 

하고 폼을, 당신의 콤보 상자에 대한 참조 설정 :

dataGridView1.Controls.Add(comboBox); 
dataGridView1.MyComboBox = comboBox; 
comboBox.Focus();