如何使用回車鍵模仿Tab鍵

2021-04-13 07:22:31 字數 2490 閱讀 3595

李中未:

在delphi程式設計中,如何實現用回車鍵在若干個編輯視窗中切換?比如,姓名和密碼兩個輸入視窗,輸入姓名後,只能用tab鍵或用滑鼠定位游標到密碼輸入視窗,我想用回車鍵切換視窗。

回答:

先將窗體的keypreview屬性設為true。然後在formkeypress事件中加入以下**:

proceduretform1.formkeypress(sender: tobject;varkey: char);

begin

ifkey = #13then

begin

key := #0

perform(wm_nextdlgctl, 0, 0);

end

end

這個方法對於大多數控制項都適用,但不適用於tbutton控制項,因為對於按鈕,回車鍵等於按下了按鈕,不觸發formkeypress事件。

perry問:

非常感謝得到你的指點,你的方法確實已經非常簡單,但如果要在每乙個視窗都重複寫以上內容,還是有些繁。怎樣將其改寫成乙個自定義過程,然後在每乙個視窗中呼叫此過程?

答:要改寫成乙個自定義過程,可以這樣:

proceduremykeypress(frm:tform;varkey: char);

begin

ifkey = #13then

begin

key := #0

frm.perform(wm_nextdlgctl, 0, 0);

end

end

proceduretform1.formkeypress(sender: tobject;varkey: char);

begin

mykeypress(self, key);

end

如果你經常使用這樣的窗體,你也可以在設定好keypreview屬性和輸入**後,在form上擊右鍵,選擇add to repository,這樣把form新增到delphi的repository庫中,以後建立新視窗時,可以從delphi的對話方塊的forms中選擇你新增的這個窗體作為模板。

perry問:

如果我在form中使用了dbmemo控制項,那麼在dbmemo中(**的備註字段)將不能輸入enter,也就是說說在dbmemo中不能實現換行操作。因為只要你按下enter鍵,游標馬上就會從dbmemo中跳幵,這顯然不合要求。請問這一點應如何改進?謝謝!

答:這的確是個問題。可以這樣解決:在keypress事件中先判斷一下控制項的型別,如果當前控制項是tmemo或tdbmemo(甚至可以進一步檢查控制項的名字中是否帶有memo的),就不進行移動,對於這樣的控制項還是通過tab鍵移動。下面是**:

varsclassname:string

begin

ifkey = #13then

begin

sclassname := tform(sender).activecontrol.classname;

if(sclassname <>'tdbmemo')

and(sclassname <>'tmemo')then

begin

key := #0

perform(wm_nextdlgctl, 0, 0);

end

end

劉鷹的意見:

選中窗體上所有控制項後,在他們的keypress事件中寫如下**:

selectnext(sender as twincontrol,true,true);

此問題由李海回答。

本文**

多個文字框錄入,使用回車鍵替找Tab鍵

為了快速把form的所有文框輸入完畢,我們不必使用滑鼠去focus文字框。在html頁中放幾個文字框 div class divinput div input id text1 type text div div input id text2 type text div div input id t...

小程式 使用回車鍵搜尋

在data裡面 data 在getsearch txt中獲取輸入框內容 getsearch txt function console.log 搜尋框裡面的值 e.detail.value 然後在searchsubmit函式中寫內容 searchsubmit function options meth...

回車鍵的使用

在vc中建立一基於對話方塊的工程,編譯執行,成功。面對著剛剛建立的工程,心裡那個高興呀。突然一時心血來潮,按了個回車鍵,工程一閃而過沒了。再編譯執行,成功。按了個esc鍵,工程一閃而過也沒了。為什麼會這樣,因為cdialog 中有預設對enter和esc鍵的處理。解決這種一按回車和esc鍵就關閉工程...