C# run-time DateTimePicker validation error when manually entering date or time? -


i have c# winforms project targeting .net 3.5 2 datagridviews. visual studio 2010 pro on win 7 64 bit.

i'm using 2 datetimepicker controls (one time , 1 date) created @ run-time floating on top of appropriate datetime cells in gridview. pickers displayed when time or date cell gets focus.

system time format 24 hours.

private datetimepicker timepicker;  timepicker = new datetimepicker(); timepicker.format = datetimepickerformat.custom; timepicker.customformat = "hh:mm"; timepicker.maxdate = new datetime(9998, 12, 31); timepicker.mindate = new datetime(1753, 01, 01); timepicker.showupdown = true; timepicker.width = 60; timepicker.hide(); timepicker.valuechanged += new eventhandler(timepicker_valuechanged); timepicker.keypress += new keypresseventhandler(timepicker_keypress); timepicker.lostfocus += new eventhandler(timepicker_lostfocus); dgtxsummary.controls.add(timepicker);  void timepicker_valuechanged(object sender, eventargs e) {    // dgtxsummary datagridview containing dates , times    dgtxsummary.currentcell.value = timepicker.value;             }  void timepicker_lostfocus(object sender, eventargs e) {    timepicker.hide(); }  // used debugging; shows message in text field when 10, 20 etc // entered void timepicker_keypress(object sender, keypresseventargs e) {    if (char.isdigit(prevchar) && e.keychar == '0')    {       string correcthour = prevchar.tostring() + '0';       message = "should have been " + correcthour;    }     prevchar = e.keychar; } 

when time cell clicked, timepicker displayed

private void showtimepicker(point cellpos, datetime dt) {   timepicker.location = cellpos;   timepicker.value = dt;   timepicker.show();   timepicker.focus(); } 

the problem occurs when 2 conditions met:

1) first time number entered after picker gets focus
2) valid number ending 0* manually entered (keyboard)

*0, 10 or 20 in hour slot, 0, 10, ... , 50 in minute slot

using updown buttons works fine.

the result at first previous time or date shown , updown buttons disappear control (timepicker) either hidden or closed, , underlying cell in datagridview has focus , in edit mode previous time or date. when clicking inside or outside cell, 01 shown if 10 entered.

i've created design-time datetimepicker on same form, , works normally.

what missing?

i've found culprit in code:

dgtxsummary.controls.add(timepicker); 

it seems datetimepicker needs added form, not datagridview.

after changing code this.controls.add(timepicker); , using datepicker.bringtofront(); in showtimepicker(...) (to avoid control being hidden behind datagridview), :-)

fwiw use following code place datetimepicker on top of corresponding cell (code stripped of error handling, null checking etc):

private void dgtxsummary_cellmouseclick(object sender, datagridviewcellmouseeventargs e) {     rectangle cellrect = dgtxsummary.getcelldisplayrectangle(e.columnindex, e.rowindex, false);     point dgpos = dgtxsummary.location;     point cellpos = new point(dgpos.x + cellrect.x, dgpos.y + cellrect.y);      datetime dt = datetime.parse(row.cells[e.columnindex].formattedvalue.tostring());      showdatepicker(cellpos, dt); } 

Comments