2011-03-28 15 views
8

Cuando se hace clic en la flecha de avance o retroceso de mes en mi control DateTimePicker , se activa repetidamente el evento ValueChanged. Tengo que usar el depurador para detener la aplicación.DateTimePicker ValueChanged Repeticiones de eventos con la flecha de mes

Nota: Mi aplicación funciona bien siempre que haga clic en una de las fechas.

La documentación de MSDN muestra ejemplos para crear el control. Pero no puedo encontrar ninguna función de ejemplo llamada dateTimePicker1_ValueChanged(). El esqueleto para esta función fue creado para mí, cuando hice doble clic en el control en el diseñador VS.NET2008.

+0

Por favor, muestre el código dentro de 'dateTimePicker1_ValueChanged'. –

+0

Cambias el valor de la Fecha en tu dateTimePicker1_ValueChanged() – thumbmunkeys

+0

if (dtpStart.Value> dtpEnd.Value) {MessageBox.Show ("La fecha de finalización de la licencia no puede ocurrir antes de la fecha de baja", "Invalid Entry", MessageBoxButtons.OK); dtpStart.Value = dtpEnd.Value; } –

Respuesta

3

Dave81 me puso en el camino correcto. Si hace lo que dice, el problema es que cuando el usuario cambia el valor manualmente, obviamente el evento CloseUp no se desencadena. La forma en que resolvió este problema con el reinicio constante del evento de cambio de mes, es cambiar mi evento ValueChanged para que solo se actualice si el calendario no se abre. Es decir .:

private bool _calendarDroppedDown = false; 
//called when calendar drops down 
private void dateStartDateTimePicker_DropDown(object sender, EventArgs e) 
{ 
    _calendarDroppedDown = true; 
} 
//called when calendar closes 
private void dateStartDateTimePicker_CloseUp(object sender, EventArgs e) 
{ 
    _calendarDroppedDown = false; 
    RefreshToolbox(null, null); //NOW we want to refresh display 
} 

//This method is called when ValueChanged is fired 
public void RefreshToolbox(object sender, EventArgs e) 
{ 
    if(_calendarDroppedDown) //only refresh the display once user has chosen a date from the calendar, not while they're paging through the days. 
    return; 
    ... 
} 
+2

Si bien no usé esta solución específica, me llevó a encontrar la propiedad IsDropDownOpen en datepickers. Significa que no tiene que escribir estos controladores de eventos, pero puede lograr lo mismo. – bio595

12

No estoy seguro de lo que intentas lograr, pero mi suposición es que quieres, por ejemplo, mostrar un mensaje o algo similar. Si es así, entonces no teme porque está enfrentando el mismo problema que me estaba preguntando hace algún tiempo. En lugar de utilizar ValueChanged -event, use CloseUp -event.CloseUp -event se activa solo cuando el usuario finalmente selecciona un valor. Espero que esto sea lo que estabas buscando. Si desea actualizar, por ejemplo, algunos cálculos que se muestran al usuario en la interfaz de usuario, debe usar ValueChanged -event.

+0

Gracias por su ayuda –

+0

No hay problema. ¿Esto resolvió tu problema? :) – Dave81

+0

Muchas gracias ... :-) –

1

Cuando hace clic en la flecha hacia abajo de un datetimepicker, muestra una fecha predeterminada. Cuando hace clic en cualquier fecha en el selector de fecha y hora, se activa el evento datetimepicker1_valuechanged. Lo que sea que haya puesto el esqueleto para el evento, funciona bien entonces. Unnikrishnan C

Cuestiones relacionadas