private void tbday_keypress(object sender, system.windows.forms.keypresseventargs e)
{
if (this.designmode)
return ;
textbox obj = (textbox)sender ;
obj.selectedtext = "" ;
string strvalue = obj.text.trim() ;
int ilen= strvalue.tostring().length ;
int key = (int)(e.keychar) ;
switch(key)
{
case 48://0
case 49://1
case 50://2
case 51://3
case 52://4
case 53://5
case 54://6
case 55://7
case 56://8
case 57://9
if (ilen == 0)
e.handled = false ;
else if (ilen == 1)//已经输入了一位
{
e.handled = true ; //默认不处理,后面分析需要处理的情况
if (key==48||key==49||key==50)//现在输入的是0,1,2
{
if(obj.selectionstart == 0)//插入
{
if (strvalue != "0")//已经输入的不是0
e.handled = false ;
if (strvalue == "0" &&(key==49||key==50))
e.handled = false ;
}
else
{
if (strvalue == "0"||strvalue == "1"||strvalue == "2"||strvalue == "3")//追加且已经输入了0,1,2,3
e.handled = false ;
if (key==48&&strvalue == "0")
e.handled = true ;
if (key==50&&strvalue == "3")
e.handled = true ;
}
}
else//输入的是非0,1,2数字
{
if (strvalue == "0"||strvalue == "1"||strvalue == "2")//已经输入了一个0,1,2
{
if (obj.selectionstart == 0)//前面插入数字
{
if (key==51&&strvalue != "2")//只能插入3
e.handled = false ;
}
else
e.handled = false ;
}
}
}
else
e.handled = true ;
break ;
case 45://-
e.handled = true ;
break ;
case 8://backspace
if (ilen == 0)
obj.parent.selectnextcontrol(obj,false,true,false,true) ;
break ;
case 27://esc
e.handled = false ;
break ;
default :
e.handled = true ;
break ;
}
}
private void tbmonth_enter(object sender, system.eventargs e)
{
if (this.designmode)
return ;
textbox obj = (textbox)sender ;
obj.selectall() ;
}
private void tbmonth_keydown(object sender, system.windows.forms.keyeventargs e)
{
if (this.designmode)
return ;
textbox obj = (textbox)sender ;
int ivalue = e.keyvalue ;
switch(ivalue)
{
case 37://left
if (obj.selectionstart == 0)
{
obj.parent.selectnextcontrol(obj,false,true,false,true) ;
}
break ;
case 38://top
incdecdate(1) ;
break ;
case 39://right
if (obj.selectionstart == obj.text.length)
{
obj.parent.selectnextcontrol(obj,true,true,false,true) ;
}
break ;
case 40://down
incdecdate(-1) ;
break ;
}
}
private void dateinput_leave(object sender, system.eventargs e)
{
setrightfmt() ;
}
private void tbyear_leave(object sender, system.eventargs e)
{
string stryear = tbyear.text ;
int ilen = stryear.length ;
switch(ilen)
{
case 0:
break ;
case 1:
tbyear.text = "200"+stryear ;
break ;
case 2:
if (int.parse(stryear)<40)
tbyear.text = "20"+stryear ;
else
tbyear.text = "19"+stryear ;
break ;
}
}
private void tbmonth_leave(object sender, system.eventargs e)
{
if (tbmonth.text!="" &&tbday.text !="")
setrightmonthday() ;
}
private void updown_scroll(object sender, system.windows.forms.scrolleventargs e)
{
if (this.designmode)
return ;
switch(e.type)
{
case scrolleventtype.smallincrement:
incdecdate(-1) ;
break ;
case scrolleventtype.smalldecrement:
incdecdate(1) ;
break ;
}
}
private void btnmain_paint(object sender, system.windows.forms.painteventargs e)
{
control con = (control)sender ;
int baselen = con.height / 6 ;
point pos1 = new point(con.width/2 – baselen-2,baselen*2) ;
point pos2 = new point(con.width/2 + baselen+2,baselen*2) ;
point pos3 = new point(con.width/2,baselen*4) ;
point[] mulpos = {pos1,pos2,pos3} ;
if (btnmain.enabled)
{
e.graphics.drawpolygon(pens.black,mulpos) ;
e.graphics.fillpolygon(brushes.black,mulpos) ;
}
else
{
e.graphics.drawpolygon(pens.darkgray,mulpos) ;
e.graphics.fillpolygon(brushes.darkgray,mulpos) ;
}
}
private void btnmain_click(object sender, system.eventargs e)
{
if (this.designmode)
return ;
if (frmcalendar.visible)
{
frmcalendar.visible = false ;
return ;
}
else
{
point pos = this.location ;
pos.y = pos.y + this.height ;
pos = this.parent.pointtoscreen(pos) ;
pos = setcalendarpos(pos,frmcalendar) ;
frmcalendar.setdesktoplocation(pos.x,pos.y) ;
frmcalendar.visible = true ;
}
}
private point setcalendarpos(point spos,control contoshow)
{
point newpos =new point(spos.x,spos.y);
int iconwidth = contoshow.width ;
int iconheight = contoshow.height ;
int iscrwidth = system.windows.forms.screen.primaryscreen.workingarea.width ;
int iscrheight = system.windows.forms.screen.primaryscreen.workingarea.height ;
if (spos.y + iconheight>iscrheight)
newpos.y = iscrheight – iconheight ;
if (spos.x + iconwidth>iscrwidth)
newpos.x = iscrwidth – iconwidth ;
return newpos ;
}
private void lbspace_click(object sender, system.eventargs e)
{
if (this.designmode)
return ;
tbday.focus() ;
tbday.selectall() ;
}
private void lbsep1_enabledchanged(object sender, system.eventargs e)
{
label label = (label)sender;
if (label.enabled)
label.backcolor = color.fromknowncolor(knowncolor.window) ;
else
label.backcolor = color.fromknowncolor(knowncolor.control) ;
}
}//end class
public class dateformatconverter:system.componentmodel.stringconverter
{
/// <summary>
/// 根据返回值确定是否支持下拉框的形式
/// </summary>
/// <returns>
/// true: 下拉框的形式
/// false: 普通文本编辑的形式
/// </returns>
public override bool getstandardvaluessupported(system.componentmodel.itypedescriptorcontext context)
{
return true;
}
/// <summary>
/// 下拉框中具体的内容
/// </summary>
public override system.componentmodel.typeconverter.standardvaluescollection getstandardvalues(system.componentmodel.itypedescriptorcontext context)
{
return new standardvaluescollection(new string[]{"yyyy-mm-dd","yyyy.mm.dd","yyyy/mm/dd","yyyy年mm月dd日","自定义"});
}
public override bool canconvertfrom(system.componentmodel.itypedescriptorcontext context, system.type sourcetype)
{
if( sourcetype == typeof(string) )
return true;
else
return base.canconvertfrom(context, sourcetype);
}
/// <summary>
/// 根据返回值确定是否是不可编辑的文本框
/// </summary>
/// <returns>
/// true: 文本框不可以编辑
/// flase: 文本框可以编辑
/// </returns>
public override bool getstandardvaluesexclusive(system.componentmodel.itypedescriptorcontext context)
{
return true;
}
}
}//end namespace
