VB程式設計中的Keydown事件不讓其反覆觸發的辦法

2022-03-24 22:22:33 字數 4161 閱讀 2779

1樓:

定義一個窗體變數

dim keyvalue as integer

private sub form_load()

keyvalue = -1

end sub

private sub form_keydown(keycode as integer, shift as integer)

if keyvalue = keycode then exit sub'新增

select case keycode

case 37 'left

mscomm1.output = "le"

txtlinkmessage.text = "向左"

case 38 'up

mscomm1.output = "go"

txtlinkmessage.text = "向前"

case 39 'right

mscomm1.output = "ri"

txtlinkmessage.text = "向右"

case 40 'down

mscomm1.output = "ba"

txtlinkmessage.text = "向後"

case else

keyascii = 0

end select

keyvalue = keycode'新增

end sub

private sub form_keyup(keycode as integer, shift as integer)

select case keycode

case 37 'left

mscomm1.output = "tu"

case 39 'right

mscomm1.output = "tu"

case 38 'up

mscomm1.output = "di"

case 40 'down

mscomm1.output = "di"

end select

if keyvalue = keycode then keyvalue = -1'新增

end sub

2樓:匿名使用者

建一個按鍵asc碼的對映表,對每個鍵設定一個bool型別的標誌表示是否按下,每次按鍵事件先查表,確定其按下與否,在決定是否響應keydown事件

3樓:匿名使用者

設定一個變數,在keydown事件中=true,在keyup中=false;在keydown中判斷如為真就不要再傳送了

4樓:匿名使用者

可以加一個標記num,如果num=0,說明是第一次按下,按下後置num=num+1,如果num=0,則傳送,否則不傳送。修改如下:

dim num as integer'定義一個全域性變數private sub form_keydown(keycode as integer, shift as integer)

if num =0 then

select case keycode

case 37 'left

mscomm1.output = "le"

txtlinkmessage.text = "向左"

case 38 'up

mscomm1.output = "go"

txtlinkmessage.text = "向前"

case 39 'right

mscomm1.output = "ri"

txtlinkmessage.text = "向右"

case 40 'down

mscomm1.output = "ba"

txtlinkmessage.text = "向後"

case else

keyascii = 0

end select

end if

num=num+1

end sub

private sub form_keyup(keycode as integer, shift as integer)

select case keycode

case 37 'left

mscomm1.output = "tu"

case 39 'right

mscomm1.output = "tu"

case 38 'up

mscomm1.output = "di"

case 40 'down

mscomm1.output = "di"

end select

num=0

end sub

vb keydown事件

5樓:匿名使用者

把我下邊這段**複製過去,然後替換掉你的全部**,就好了,我試過了.

private sub form_load()me.keypreview = true

end sub

private sub form_keydown(keycode as integer, shift as integer)

if keycode = vbkeya thenmsgbox "您按了" & chr(keycode)end if

end sub

6樓:匿名使用者

把form窗體(比如說form1)的keypreview屬性的值改為true就可以了

7樓:匿名使用者

可以的啊 我試了 可以的 why你不行呢 ?你是怎麼做的啊?你這個**是keydown時間哦 不能用keypress 而且只能按a鍵才有反應的

8樓:明蕊暨子愛

你可以用image來代替按鈕··我原來做俄羅斯方塊就是這麼做的··觸發image_click事件

我試過設定form的接受按鈕屬性··可是沒什麼用··呼呼

vb中form_keydown事件

9樓:

form的keypreview屬性必須=true,這個事件才能在按鍵盤時觸發。

10樓:匿名使用者

當在窗體上按鍵時觸發,如果窗體有可獲得焦點的控制元件如command、textbox、listbox等,該事件將無法觸發。

private sub form_keydown(keycode as integer, shift as integer)

print keycode,shift

end sub

其中keycode為按鍵的ascii,shift為控制鍵ctrl、shift和alt,其中ctrl鍵=2,shift鍵=1,alt鍵=4,ctrl+shift=2+1=3...,即:如果按住ctrl+z,則keycode=90,shift=2

11樓:匿名使用者

觸發順序:keydown keyup keypress

keycode是對應鍵盤的按鍵編碼,一個按鍵只有一個編碼,不是ascii碼,也就是說大寫a和小寫a的keycode是一樣,如果有小鍵盤,那麼字母上方的數字鍵和小鍵盤的數字鍵的keycode是不一樣的,shift是表示是否有沒有按shift、ctrl、alt組合鍵的情況,如可以是shift+ctrl+x(代表其他鍵),如果想知道每個按鍵的值可以用print方法把它輸出出來

希望回答對你有幫助

在vb的程式設計中,按enter鍵就觸發的事件 怎麼實現?

12樓:

在vb裡,常量vbcr對應回車鍵的ascii,就是10;常量vblf對應換行鍵的ascii,就是13;vbcrlf是回車加換行。

vbkeyenter需要定義常量13才能使用

13樓:

vbkeyenter不是vb庫標準常量,換句話說,如果使用者沒定義vbkeyenter,則vbkeyenter值為零,根本沒有這個鍵值!

您錯寫的vbkeyenter應該寫成「vbkeyreturn」(13)換行鍵。

注:建議樓主開啟變數檢查開關option explicit開啟此開關後,若執行樓主貼出來的**,程式會丟擲異常「變數未定義。」

希望對樓主有幫助。

14樓:

3條回答都很好,也足夠了

VB程式設計問題,VB程式設計中的迴圈問題

有個 自己去看吧,都是考試的。編一個求圓周長的程式。輸入半徑,得到周長和麵積。試試看。建議你不要光學vb,畢竟它有太多缺點,很多事做不了 如果是對basic語言感興趣的話,到不如去學哈freebasic,powerbasic,purebasic,它們都功能超級強大 freebasic甚至可以寫作業系...

數字加密VB程式設計,VB中如何編寫一個加密程式

在窗體上有兩個控制元件,command1和text1 程式執行時在文字框中輸入四位數字,如果不是四位提示請輸入四位。如下 private sub command1 click dim a 4 as integer dim i as integer if len 4 then 如果輸入的不是四位數要求...

vb程式設計 從m到n的奇數的乘積,vb程式設計 1到m之間偶數之積

判棧抄空 int stackempty seqstack s 入棧 void push seqstack s,elementtype x 出棧 elementtype pop seqstack s 答案 求n到m之間所有奇數之和 vb vb編寫程式 用來計算m的n次方 新建工程,新增command1...