河北 王翠榮 王全海
我們在使用Visual Basic for Windows開發(fā)時,經(jīng)常用到網(wǎng)格控件(Grid.vbx),因為此控件可以用來作類似于電子表格形式的輸出表,且編程簡單,但在此網(wǎng)格控件只有輸出功能,而不能直接在網(wǎng)格上輸入,這給使用者帶來一些不便。如何在執(zhí)行時向網(wǎng)絡控件中輸入數(shù)據(jù),人們使用了一些方法,但大都使用一文本控件作中間轉換,即將欲輸入的信息先輸入到該文本控件,然后將文本控件的TEXT屬性賦給網(wǎng)格的TEXT屬性,這種方法盡管解決了向網(wǎng)格輸入數(shù)據(jù)問題,但增加了一文本框,對界面有些不美觀,修改部分數(shù)字不方便,且影響速度,那么,如何直接向網(wǎng)格輸入數(shù)據(jù)呢? 本文將解決直接向網(wǎng)格輸入數(shù)據(jù)問題,基本思想是:使用網(wǎng)格控件KeyPress事件,從鍵盤上接收所擊鍵位的KeyAscii值,再由Chr$()或Chr()函數(shù)轉換成字符,然后讀出網(wǎng)格單元的當前Text值與由鍵盤接收到的字符相加,組成新的字符串,再賦給該單元的Text屬性,即Grid.Text=Grid.Text+Chr$(KeyAscii)。程序清單如下: 程序中定義了兩個Form級變量WgridCol%和WgridRow%。 Sub Grid-KeyPress(KeyAscii as Integer) Grid.Col=WgridCol% Grid.Row=WgridRow% if KeyAscii=8Then `keyascii=8為退格刪除鍵 if Grid.Text<>””Then Grid.text=Mid$(Grid.text, 1,Len(Grid.text)-1)‘刪除最后一個字符 Else Grid.text=Grid.text+Chr$(KeyAscii) End if End Sub Sub Grid-RowColChange() Wgrid.Col%=Grid.Col Wgrid.Row%=Grid.Row End Sub 這樣就可以實現(xiàn)對網(wǎng)格的任意輸入,可以輸入字符、數(shù)字等等。由于數(shù)字0到9的Ascii值為48到57,小數(shù)點Ascii的值為46,所以可以輸入任意實數(shù)。若您想防止用戶輸入除數(shù)字、小數(shù)點以外的任何其他字符,可對來自于鍵盤的Ascii值進行判斷,有條件地接收,就實現(xiàn)了僅輸入數(shù)值字符。同理也可以限制只輸入字母字符。 根據(jù)這種思想,也可以對VB中一切不具有輸入功能,但具有KeyAscii或者KeyDown事件的控件進行直接輸入,如標簽Label等。
|