top
Loading...
直接編輯VB中網格控制項的兩種方法
p>網格控制項是VB For Windows提供的一個強有力的自定義控制項,它以網格的形式提供給用戶,使用戶可以快速直觀地顯示或編輯數據庫、圖片庫、數組等大型數據集合。
網格中行和列的每一個交點稱為單元格,單元格中可以放入文字或圖片,用戶可以對其中的內容進行讀寫操作。網格控制項的屬性Col和Row指定了當前單元格在網格中的位置,這是對網格進行操作的前提條件。我們可以通過下面三種方法來指定當前單元格:

(1) 利用程序代碼來指定;
(2) 運行期間用方向鍵的移動來指定;
(3) 運行期間用鼠標左鍵單擊單元格來指定。

用Text屬性可以引用或設置當前單元格的內容。

網格控制項共有49個屬性(Property),14個事件(Event)和7個方法(Method),上文只介紹了和本文有關的屬性,其它內容讀者可參閱有關書籍。另需說明一點,在應用程序中使用網格控制項之前,必須用File菜單中的AddFile命令在工具箱中加入Grid.VBX文件。

網格控制項的功能非常強大,但令人遺憾的是,它未提供對單元格的編輯功能。用戶只能通過對當前單元格的Text屬性編程來讀寫單元格內容,而且這種方法是對靜態數據的讀寫,毫無編輯功能可言。

針對上述問題,筆者提出了兩種解決方法,取得了較好的應用效果,現分別介紹如下。

一、間接法

間接法的思路是,利用VB提供的可編輯的文本控制項作為中介,通過文本控制項的Cha nge事件觸發,實時地將文本控制項的內容傳送給網格控制項。也就是說,通過文本控制項的編輯達到間接編輯網格控制項的目的。其程序代碼如下:

Private Sub Form__Load()
Grid1.Row=0
For i=1 To 4
Grid1.Col=i
Grid1.Text=i
Next i
Grid1.Col=0
For i =1 To 3
Grid1.Row=i
Grid1.Text=i
Next i
End Sub

Private Sub Grid1__Click()
Text1.Text=
Text1.SetFocus
End Sub

Private Sub Text1__Change()
Colnum=Grid1.SelStartCol
Rownum=Grid1.SelStartRow
Grid1.Col=Colnum
Grid1.Row=Rownum
Grid1.Text=Text1.Text
End Sub

由于間? 采用了文本框進行編輯,不但支持常規的文字編輯,而且還支持標記、剪貼等各種高級編輯,所以它具有很強的編輯功能。但其缺點也是顯然的:為了編輯網格,必須加入一個文本框,這勢必會影響屏幕布局;加之含義不清,容易引起誤解。

二、直接法

直接法的思路是,利用網格控制項的KeyDown和KeyPress事件檢測用戶的按鍵操作,通過對不同按鍵的分析,采取相應的字符串處理方法直接處理Text內容(也就是說自己編制處理字符串的程序),從而達到直接編輯單元格的目的。其程序代碼如下:

Sub Grid1__KeyDown(KeyCode As Integer,Shift As Integer)
If KeyCode=46 Then grid1.Text=
’Del鍵將清除當前網格單元格的內容
End Sub

Sub Grid1__keyPress(keyasciiAslnteger)
Select Case keyascii
Case 8
’處理退格鍵
If Len(grid1.Text)=0 Then Exit Sub
grid1.Text=Left$(grid1.Text,Len(grid1.Text)-1)
Exit Sub
Case 46
’處理小數點
grid1.Text=grid1.Text+.
Exit Sub
Case 45
’處理負號
grid1.Text=grid1.Text+-
Exit Sub
Case 43
’處理正號
grid1.Text=grid1.Text++
Exit Sub
End Select
If(keyascii<48 Or keyascii>58) Then
’處理非數字
Beep:Exit Sub
End lf
grid1.Text=grid1.Text+Right(Str(keyascii-48),1)
End Sub

這一段程序實現的功能是:用戶可用鼠標選定當前的單元格,并可完成數據的輸入工作 ,同時對非數字輸入發出報警。本段程序只支持用Del鍵清除當前單元格和退格鍵刪除尾字符的編輯功能。當然,程序設計員可以根據需要處理更多的鍵盤操作,從而設計出更強的編輯功能。
直接法的優點是編輯直觀,且可以針對具體問題設計出專用的編輯功能,其缺點是編輯功能不強。
從筆者的經驗來看,網格編輯不是字處理,簡單的編輯功能已可以滿足一般的要求,所以從程序優化的角度筆者推薦使用直接法。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗