2011-06-14 54 views
19

¿Cómo puedo evitar el doble clic en un DropDownButton utilizado dentro de un DataGridView? Ahora puedo ver los elementos desplegables dentro del DataGridView haciendo clic dos o más veces. La primera vez que selecciona la celda y la segunda vez cuando hago clic en la flecha DropDownButton, muestra la lista. ¿Cómo puedo lograr lo mismo con un solo clic?Abrir elementos de la lista desplegable (en una cuadrícula de datos) en un solo clic

+0

Puede elaborar sobre como lo que quiere lograr – V4Vendetta

+0

@ V4Vendetta, he actualizado la descripción. Por favor, compruebe. – NewBie

+0

Es posible que desee comprobar [esta solución.] (Http://stackoverflow.com/questions/34543940/datagridviewcomboboxcolumn-doesnt-open-the-dropdown-on-first-click/39757746#39757746) – TaW

Respuesta

15

Usted puede lograr esto mediante la suscripción de los EditingControlShowing caso de la red y no por el control del tipo ComboBox

ComboBox ctl = e.Control as ComboBox; 
ctl.Enter -= new EventHandler(ctl_Enter); 
ctl.Enter += new EventHandler(ctl_Enter); 

Y en el evento Enter, utilice la propiedad

void ctl_Enter(object sender, EventArgs e) 
{ 
    (sender as ComboBox).DroppedDown = true; 
} 

DroppedDown indica como el nombre sugiere si se muestra o no el área desplegable, de modo que cada vez que se ingrese el control, se establecerá en verdadero y se mostrarán los elementos sin necesidad de hacer más clics.

+0

necesito mostrar el dropitems al hacer clic en la celda de la cuadrícula de datos. Esto no da ninguna diferencia. – NewBie

+12

¿Puede establecer DataGridView EditMode = 'DataGridViewEditMode.EditOnEnter' – V4Vendetta

+0

que solo hizo el trabajo. Establecí la propiedad EditMode = EditOnEnter solamente y que ahora está funcionando.Gracias. – NewBie

17

Conjunto EditMode propiedad del DataGridView-EditOnEnter: link

DataGridView.EditMode - Obtiene o establece un valor que indica cómo empezar a editar una celda.

EditOnEnter - La edición comienza cuando la celda recibe el foco.

6

La "propiedad EditMode set del DataGridView a EditOnEnter" funcionó para mí, pero encontré otro problema: el usuario no puede eliminar una fila simplemente seleccionando y presionando la tecla SUPR. Entonces, una búsqueda en Google me dio otra forma de hacerlo. Simplemente coger el CellEnter evento y comprobar si la célula es del tipo apropiado para realizar la acción apropiada como este código de ejemplo:

private void Form_OnLoad(object sender, EventArgs e){ 
    dgvArmazem.CellEnter += new DataGridViewCellEventHandler(dgvArmazem_CellEnter); 
} 

void dgvArmazem_CellEnter(object sender, DataGridViewCellEventArgs e) 
     { 
      DataGridView dg = (DataGridView)sender; 

      if (dg.CurrentCell.EditType == typeof(DataGridViewComboBoxEditingControl)) 
      { 
       SendKeys.Send("{F4}"); 
      } 
     } 

Ahora el cuadro combinado cae más rápido y el usuario todavía eliminar una fila mediante la selección de una fila y presionar DEL llave.

Eso es todo.

+0

Experimento este comportamiento interesante: el primer clic expande el dropbox, selecciona el primer elemento y cierra instantáneamente el dropbox. Necesito hacer clic de nuevo para realmente hacer mi selección. – valsidalv

Cuestiones relacionadas