2012-02-05 13 views
6

Tengo datagridview en el que una de las columnas es una casilla de verificación. Manejo el evento CellContentClick para actualizar la información cada vez que el usuario marca o desmarca una de las casillas de verificación. Funciona muy bien. Mi problema es que cuando hago doble clic en una casilla de verificación se llama a CellContentClick y luego CellContentDoubleClick después de eso. Deseo anular la llamada para CellContentDoubleClick. ¿Hay alguna forma de hacer esto?cómo evitar que se genere el evento de doble clic en una vista de cuadrícula de datos?

+0

Se podría añadir una bandera en la clase que el clic se está manejando, y volver en el evento de doble clic si ese indicador está activado . pero eso depende en gran medida del orden en que se envían los eventos, y probablemente no sea la mejor manera de hacerlo. – cyanic

+0

Gracias. Sí, parece una buena opción. Sin embargo, no sé si cuando haga un ** return ** la casilla de verificación se marcará o no de todos modos. Una cosa que hice fue establecer la propiedad ** ReadOnly ** true, después de esto cuando haces doble clic en la casilla de verificación en la celda solo se actualiza una vez. – user990692

+1

Puede usar fácilmente un indicador bool para ignorar el evento cuando se produce muy poco después del CellContentClick. Estoy empezando a recordar esto como un error ... Aquí hay algo más de información: http://www.aspnet-answers.com/microsoft/NET/33946836/datagridview-cellcontentclick-fires-after-celldoubleclick.aspx y http : //stackoverflow.com/questions/381072/datagridview-cellcontentclick y http://social.msdn.microsoft.com/Forums/en-us/csharpgeneral/thread/e6f3a286-3e93-4170-a895-8c68a616cc37 –

Respuesta

1

Puede quitar el controlador de eventos de la cuadrícula de datos.

 EventHandler eventHandler = new EventHandler(YourdataGridview_CellContentDoubleClick); 
    YourdataGridview.CellContentDoubleClick -= eventHandler; 
0

Usted puede crear su propia clase que hereda de DataGridView y anular el método de lo que elevaría el evento de manera que no quede levantada.

public class MyDataGridView : DataGridView 
{ 
    protected override viod OnCellContentDoubleClick(
DataGridViewCellEventArgs e) 
    { 
     // by having no code here and not 
     // calling base.OnCellContentDoubleClick(e); 
     // you prevent the event being raised 
    } 
} 

Ver http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.oncellcontentdoubleclick.aspx

0

¿Qué tal esto:

public class MyDataGridView : DataGridView 
{ 
    protected override void OnCellContentDoubleClick(DataGridViewCellEventArgs e) 
    { 
     base.OnCellContentClick(e); 
    } 
} 
+1

No debe he probado este código 'protección anulada violar' – quantum

Cuestiones relacionadas