2010-09-13 20 views

cevap

15

Bir forumda this kodunu buldum ve çalışıyor.

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
{ 
    DataGridViewTextBoxEditingControl tb =(DataGridViewTextBoxEditingControl)e.Control; 
    tb.KeyPress += new KeyPressEventHandler(dataGridViewTextBox_KeyPress); 

    e.Control.KeyPress += new KeyPressEventHandler(dataGridViewTextBox_KeyPress); 
} 


private void dataGridViewTextBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    //when i press enter,bellow code never run? 
    if (e.KeyChar==(char)Keys.Enter) 
    { 
    MessageBox.Show("You press Enter"); 
    } 
} 
+4

Neden iki kez eklediniz? –

4

DataGridViewCell herhangi bir olay mevcut değil, ancak kendisi DataGridView üzerinde KeyDown olayı dinlemek ve daha sonra hücre seçildiğinde hangi bakabilirsiniz:

public void dataGridView_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.F1) 
    { 
     var selectedCell = dataGridView.SelectedCells[0]; 
     // do something with selectedCell... 
    } 
} 
+0

Tamam efendim ... deneyeceğim. teşekkürler – yonan2236

+2

Düzenleme denetimlerindeki klavye olayları DGV için tetiklenmeyecek, yukarıdaki kod düzenleme modunda önemli olayları işlemek için çalışmaz. –

3

aslında bir hücreye kullanıcı türleri olduğunda düzenleme amacıyla hücrenin içine yerleştirilmiş kontrole yazarak. Örneğin, bir dize sütun türü, kullanıcının giriş yapması için hücre içinde kullanılmak üzere bir TextBox oluşturacaktır. Bu nedenle, düzenleme gerçekleştiğinde hücrenin içine yerleştirilmiş olan TextBox'ın KeyDown olayına girmeniz gerekir.

0

başka bir çözüm bu eski bir soru olduğunu biliyorum

private void grdDetalle_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     // Sólo queremos esta funcionalidad para determinadas columnas Clave y Nombre 
     if ((grdDetalle.Columns[grdDetalle.CurrentCell.ColumnIndex].Name == "colClaveArticulo") || 
      (grdDetalle.Columns[grdDetalle.CurrentCell.ColumnIndex].Name == "colNombre")) 
     { 
      /// Workarround para que estando editando en las columnas del grid Clave y Nombre 
      /// podamos detectar cuando se dio F4 para lanzar el dialogo de busqueda del 
      /// articulo. 
      e.Control.KeyDown += new KeyEventHandler(dataGridViewTextBox_KeyDown); 
      e.Control.Leave += new EventHandler(dataGridViewTextBox_Leave); 
     } 
    } 

    private void dataGridViewTextBox_Leave(object sender, EventArgs e) 
    { 

     if ((grdDetalle.Columns[grdDetalle.CurrentCell.ColumnIndex].Name == "colClaveArticulo") || 
      (grdDetalle.Columns[grdDetalle.CurrentCell.ColumnIndex].Name == "colNombre")) 
     { 
      try 
      { 
       (sender as DataGridViewTextBoxEditingControl).KeyDown -= 
        new KeyEventHandler(dataGridViewTextBox_KeyDown); 
      } 
      catch (Exception ex) 
      { } 
     } 
    } 

    private void dataGridViewTextBox_KeyDown(object sender, KeyEventArgs e) 
    { 
     // F4 Pressed 
     if ((grdDetalle.Columns[grdDetalle.CurrentCell.ColumnIndex].Name == "colClaveArticulo") || 
      (grdDetalle.Columns[grdDetalle.CurrentCell.ColumnIndex].Name == "colNombre")) 
     { 
      if (e.KeyCode == Keys.F4) // 115 
      { 
       MessageBox.Show("Oprimieron F4"); 
       e.Handled = true; 
       e.SuppressKeyPress = true; 
      } 
     } 
    } 
+1

Kodunuzu İngilizce değişken isimleri ve yorumları ile değiştirmenizi öneririm. Böylece, kullanıcılar yaptığınız şeyi daha kolay anlayabilir. – user1071777

0

, ama üst cevabı olarak üzerine ben geliştirdik inanıyoruz.

IDataGridViewEditingControl _iDataGridViewEditingControl; 
    private void SlotTimesDGV_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     if (_iDataGridViewEditingControl is DataGridViewComboBoxEditingControl) 
     { 
      DataGridViewComboBoxEditingControl iDataGridViewEditingControl = _iDataGridViewEditingControl as DataGridViewComboBoxEditingControl; 
      iDataGridViewEditingControl.KeyPress -= SlotTimesDGV_EditingControlShowing_KeyPress; 
     } 
     if (e.Control is DataGridViewComboBoxEditingControl) 
     { 
      DataGridViewComboBoxEditingControl iDataGridViewEditingControl = e.Control as DataGridViewComboBoxEditingControl; 
      iDataGridViewEditingControl.KeyPress += SlotTimesDGV_EditingControlShowing_KeyPress; 
      _iDataGridViewEditingControl = iDataGridViewEditingControl; 
     } 
    } 

    private void SlotTimesDGV_EditingControlShowing_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     MessageBox.Show(""); 
    } 

IDataGridViewEditingControl bir örnek değişkeni olan ederek, hücrelerin etrafında hareket ve olay hücrenin tek tip sınırlı değildir yinelenen aramalar neden olacaktır KeyPress olayı kaldırabilirsiniz.