不知道你在文本框中輸入日期時(shí)是不是感到不方便?反正我是,我經(jīng)常會(huì)把"mm-dd-yy"輸成"yy-mm-dd",經(jīng)常會(huì)看到“無(wú)效的日期”的提示。當(dāng)你把程序交付給用戶使用時(shí),這種不方便一定會(huì)影響用戶對(duì)程序的評(píng)價(jià)。這個(gè)煩人問(wèn)題困擾我很長(zhǎng)時(shí)間了,今天無(wú)意中查看VFP的示例,在其中發(fā)現(xiàn)了一個(gè)示例,可以很好的解決這個(gè)問(wèn)題,現(xiàn)在把他寫(xiě)下來(lái),與狐友們分享。
Vfp版本:9.0正式版
操作系統(tǒng):windows 2000 專業(yè)版
在這個(gè)示例中使用了VFP自帶的類,這個(gè)類位于 home()+’ffc\_datetime.vcx’中,類名為_olecalendae
新建一個(gè)數(shù)據(jù)表 test.dbf,,具有兩個(gè)字段 姓名 c(10) ,生日 d()
隨便添加一個(gè)記錄,
新建一表單:如圖

將數(shù)據(jù)表tese.dbf添加到數(shù)據(jù)環(huán)境中。
上邊的文本框與“姓名”字段綁,下邊的文本框與“生日”字段綁定。
代碼:
|
“選擇日期”按鈕
|
#DEFINE C_CALCAPTION_LOC "選擇日期"
oCalForm = Create('form')
oCalForm.NewObject("oleCalendar","_olecalendar",HOME()+"FFC\_datetime.vcx")
WITH oCalForm.oleCalendar
.date_column = "test.生日"&&得當(dāng)前日期, 并將生日字段與olecalendar控件綁定
.RefreshDisplay()&&使日歷控件顯示當(dāng)時(shí)日期
.BackColor = THISFORM.BackColor
.Visible = .T.
ENDWITH
WITH oCalForm
.AutoCenter = .T.
.BorderStyle = 2
.MaxButton = .F.
.MinButton = .F.
.Height = oCalForm.oleCalendar.Height
.Width = oCalForm.oleCalendar.Width
.Caption = C_CALCAPTION_LOC
ENDWITH
oCalForm.Show(1)
THISFORM.Refresh
|
|
“退出”按鈕
|
thisform.Release
|
運(yùn)行表單
點(diǎn)擊“日期選擇”按鈕會(huì)出現(xiàn)下面的效果。

現(xiàn)在可以選擇日期,選擇后關(guān)閉小窗口,生日文本中框中的日期值會(huì)變成你選擇的日期。
注意:數(shù)據(jù)表中一定要有記錄。
_oleCalendar類位于Home()+'FFC'目錄下的_datetime.vcx類庫(kù)里,拖入到窗口中,右擊,點(diǎn)“生成器”,在窗口中的“Field name to bind calendar”處填寫(xiě)要將Calendar綁定的數(shù)據(jù)庫(kù)字段名,這樣使用時(shí)選擇好時(shí)間,會(huì)自動(dòng)地更新該字段。
例: 數(shù)據(jù)庫(kù)名稱為table1,里面有一個(gè)logdate來(lái)與calendar綁定,如果該字段為空,Calendar初始化的時(shí)候會(huì)提示錯(cuò)誤,所以在此之前先插入一條記錄。
INSERT INTO table1 VALUES(DATE()) &&新增一個(gè)當(dāng)天日期記錄 frmCalendar = CREATEOBJECT('Form') &&創(chuàng)建一個(gè)表單 frmCalendar.newobject('oleCalendar','_oleCalendar','c:\foxpro\ffc\_datetime.vcx') &&表單中新加入一個(gè)calendar對(duì)象 WITH frmCalendar.oleCalendar .date_column = 'table1.logdate' &&指定與Calendar綁定的字段 .refreshDisplay() &&使用date_column中的日期來(lái)更新calendar的顯示 .backcolor = thisform.BackColor .visible = .T. .Height = 130 .width = 307 ENDWITH
WITH frmCalendar .autocenter = .T. .Borderstyle = 2 .Maxbutton = .F. .MinButton = .F. .Height = 130 .width = 307 ENDWITH
frmCalendar.show(1) thisform.Refresh()
|