2014-02-10 2 views
0

나는 콤보 박스가있는 DataGridview를 가지고있다.DataGridViewComboboxColumn SelectedIndex keypress 이벤트를 얻는 방법?

나는 다음 코드를 사용하여 콤보 상자의 선택된 인덱스를 얻을 수 있습니다 :

private void dg_errorchart_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     try 
     { 
      if (e.Control is DataGridViewComboBoxEditingControl) 
      { 
       ((ComboBox)e.Control).DropDownStyle = ComboBoxStyle.DropDown; 
       ((ComboBox)e.Control).AutoCompleteSource = AutoCompleteSource.ListItems; 
       ((ComboBox)e.Control).AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; 
      } 

      ComboBox cmbBx = e.Control as ComboBox;    

      if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl)) 
      { 
       ComboBox comboBoxCell = (ComboBox)e.Control; 
       if (comboBoxCell != null) 
       {      
        comboBoxCell.SelectionChangeCommitted -= new EventHandler(comboBoxCell_SelectionChangeCommitted); 

        comboBoxCell.SelectionChangeCommitted += new EventHandler(comboBoxCell_SelectionChangeCommitted);      
       } 
      } 

     } 
     catch (Exception ex) 
     { 

     } 
    } 

그러나 문제는이 키보드에 의해 선택되어있는 경우 나 콤보 상자의 인덱스를 얻을 수있다. 어떻게해야합니까?

는 UPDATE :

난 그냥 콤보 및 캐치 수동으로 입력하고 행 ID를 높이기 위해 또 다른 이벤트 처리기를 추가했다.

cmbBx.KeyUp -= new KeyEventHandler(cmbBx_KeyUp); 
cmbBx.KeyUp += new KeyEventHandler(cmbBx_KeyUp); 

과 내가 추가 한 이벤트 처리기에서

:

DataGridViewCell currentCell = dg_errorchart.CurrentCell; 
if (currentCell != null) 
{ 
    DataGridViewComboBoxEditingControl cmbBx = sender as DataGridViewComboBoxEditingControl; 
    if (cmbBx.SelectedIndex >= 0) 
    { 
     int nextRow = 0; 
     nextRow = currentCell.RowIndex + 1; 
     if (nextRow >= dg_errorchart.Rows.Count) 
     { 
      nextRow = nextRow - 1; 
     } 

     DataGridViewCell nextCell = dg_errorchart.Rows[nextRow].Cells[6]; 
     dg_errorchart.CurrentCell = nextCell; 
    } 
} 

감사

Suressh

+0

변경 내용이 커밋되지 않았기 때문에 컨트롤에서 'Tab'키를 누르면 작동합니까? – V4Vendetta

답변

0

에서이 이벤트 핸들러의 SelectedIndexChanged 처리하려고 했습니까?

SelectedIndexChanged 이벤트 처리기를 SelectionChangeCommitted와 동일한 위치에 dg_errorchart_EditingControlShowing 메서드에 추가하십시오. 처리기입니다.

comboBoxCell.SelectedIndexChanged -= new EventHandler(comboBoxCell_SelectedIndexChanged); 
comboBoxCell.SelectedIndexChanged += new EventHandler(comboBoxCell_SelectedIndexChanged); 

그런 다음 comboBoxCell_SelectedIndexChanged 방법에 당신은 콤보 상자에서 인덱스 또는 값을 선택 얻을 수있을 것입니다.

private void comboBoxCell_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    ComboBox conboBox = (ComboBox)sender; 
    int index = conboBox.SelectedIndex; 
    if (index > -1) 
    { 
     label1.Text = conboBox.SelectedValue + ": " + conboBox.Text; 
    } 
} 

사용자가 키보드로 항목을 선택해도 작동합니다.

+0

감사합니다. Motomoto ..하지만 문제는 사용자가 두 번 눌러 항목을 선택하고 다음 행으로 이동해야합니다. 현재 선택을 선택하고 다음 행으로 이동하기 위해 단일 입력으로 줄일 수 있습니까 ?? – Suressh

+0

그 문제를 해결하는 방법을 모르겠다. 시간이있을 때 다시 연락 할 것이다. 감사. – Alice

+1

@Suressh 아니요, 컨트롤을 선택해야하므로 더블 입력이 필요합니다. 이 경우 콤보 상자는 ComboBoxColumn 안에 있습니다. 따라서 1st 입력 후 Column이 선택됩니다. 그런 다음 2 차 입력 후 콤보 박스가 포커스를 얻습니다. –

관련 문제