實用的TextBox控件的Undo屬性
2024-07-21 02:24:11
供稿:網友
很少有vb開發人員注意到文本框(textbox)控件具有undo屬性,但這一屬性卻給程序員帶來方便。這是一個相當出色的特性,在很多需要編輯文本或者圖形的商業軟件的開發中都使用到。許多程序都需要多級別的撤消,或者有些程序需要“重新操作”而取消最后一步的操作,這些繁瑣的要求都需要復雜的編程設計,但textbox控件的一個簡單的undo屬性就可以很容易地實現這些過程。
由于undo功能是屬于文本框控件,你所需要的是向控件發送一個“undo youself”的消息。這一過程可以使用api函數sendmessage來實現。這一函數的聲明為:
declare function sendmessage lib "user32" alias _
"sendmessagea" (byvalhwnd as long, _
byvalwmsg as long, byvalwparam as long, _
lparam as any) as long
第一個參數是接受消息的句柄,在本例中為textbox控件的hwnd屬性。
第二個參數是識別消息的數字。為了能夠撤消某一操作,通常傳遞&hc7值,這也是代表著em_undo常量。
第三個和第四個參數可用于某些消息,但在本例中它沒有被使用,你可以將它們置為0。
函數返回的值取決于發送的消息。在本例中可以被省略。
為了能真正使用這一技巧,建立一個帶有一個窗體的工程,窗體中包含一個textbox控件和一個command按鈕控件。在command按鈕控件的點擊事件程序中添加以下代碼行:
sendmessage text1.hwnd, em_undo, 0&, 0&
在工程中添加一個模塊并在模塊中添加如下的代碼:
public const em_undo = &hc7
public declare function sendmessage lib "user32" _
alias "sendmessagea" (byvalhwnd as long, _
byvalwmsg as long, byvalwparam as long, _
lparam as any) as long
當運行這一工程時,在textbox控件中輸入和編輯文本。可以看到,按鈕撤消了最后一步的操作。如果沒有什么東西可以撤消,消息就不會起作用。你可以將undo屬性作為一個菜單命令以影響文本框的激活,如下所示:
if typeofactivecontrol is textbox then
sendmessageactivecontrol.hwnd, em_undo, 0&, 0&
end if
如果一個文本框沒有被激活,按鈕就不會執行任何操作。
textbox控件的undo屬性是一個具有吸收力和友好的特性,并且使用起來非常的簡單。