Visual Basic中的文本框控件允許用戶在其中鍵入文本,以便在 程序中使用。相反, 程序員可能會希望顯示一些文本但不希望用戶編 輯該文本。本文介紹了如何創建只讀的文本框控件的內容。
使一個文本框控件只讀
在Visual Basic中,如果文本框控件的MultiLine屬性設置為True ,文本將會自動地換行到下一行。另外,如果文本框控件的ScrollBars 屬性設置為3-Both(或者1-Vertical,或者2-Horizontal),用戶還能夠 滾動控件中的內容。
程序員要想實現文本框控件中的文本不可編輯,可將文本框控件 中的內容設置為只讀狀態,這可以通過使用Microsoft Windows應用程 序編程接口(API)的SendMessage函數來實現。
SendMessage函數可以用來發送一個EM_SETREADONLY消息到文本 框控件中,這將使文本框控件變為只讀。
要在程序中使用該SendMessage函數,需要將如下的聲明語句包含 在項目的通用聲明部分中(注意該聲明語句需要書寫在一行內):
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA"(B yVal hwnd As Long, ByVal wMsg As Long, ByVa l wParam As Integer, ByVallParam As Long) As Long
該SendMessage函數需要4個參數,如下所示:
?hwnd 一個長整數值,它包含文本框控件的句柄。
.wMsg 一個長整數值,它包含被發送的消息,在這個例子裡,是EM_ SETREADONLY。
?wParam 一個整數值,如果它為True,則控件被設置只讀標記,如 果它為False,則刪除控件的只讀標記。
?lParam 一個長整數值,它應該被設置為0(EM_SETREADONLY不使 用它)。
在程序運行了此SendMessage函數之後,將返回一個長整數值,指 明調用成功(返回值非0)或是失敗(返回值為0)。
樣例程序
該程序顯示了如何防止用戶編輯一個文本框控件中的內容。
1.在Visual Basic中開始一個新的工程,采用缺省的方法建立For m1。
2.將如下的常量和聲明語句添加到Form1的通用聲明部分中(注意 該聲明語句需
要書寫在一行內):
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVa l wParam As Integer, ByVal lPara mAs Long) As Long Const WM_USER = &H400 Const EM_SETREADONLY = (WM_USER + 31)
3.在Form1上添加一個文本框控 采用缺省的方法建立Text1。 將其MultiLine屬性
設置為True,並且將它的ScrollBars屬性設置為3-Both。
4.在Form1上添加一個命令按鈕控件,采用缺省的方法建立Comman d1。
5.將如下的代碼添加到Command1的單擊事件中:
Private Sub Command1_Click() Dim RetVal As Long RetVal = SendMessage(Text1.hwnd, EM_SETREADONLY, True, B yVal 0&) End Sub
通過按下F5鍵來執行樣例程序。在文本框控件中鍵入一些文本, 可以使用水平和垂直流動條來滾動文本,還可以改變文本的內容。單 擊命令按鈕,用戶仍然可以使用流動條或是光標鍵來查看文本框控件 的內容,但是不能編輯它。