1秒か2秒、どのボタンを押してもイベントが起きない状態にしたいのですが、どのようにしたら良いのか全く分かりません。(プログラムを終了させるのではないのです。)Timerを使うと上手く行くのかなとも思いましたが、私の力では解決できません。皆様の知恵をお借り出来たら幸いと思っております。宜しくお願い致します。
追加です。私のプログラムでは、KeyUPを使っています。したがって、どのキーを押してもイベントが起きない状態にしたいのです。宜しくお願い致します。
フラッグを使ってイベントプロシージャの入り口でExitSubすればいいのでは?
ご指導ありがとうございます。私の勘違いであるならお許し願いたいのですが、Exit subを使うと、そのプロシージャ(private〜で始まり、end subで終わるかたまり)から強制的に抜け出すことでイベントが起こらなくなることではないかと思うのですが如何でしょうか?
今回は、1つのプロシージャーの中で一時的に(2〜3秒だけ)止めたいのです。その後は、通常通りに動いて欲しいのです。なぜなら、特定のキーを押すと同じことを繰り返すプログラムだからなのです。
我がままなことを言って申し訳ありませんが宜しくお願い致します。
特定のキーだけイベントの処理をしたいのであれば
イベントの中でIf文でその他のキーが押されたときは
軒並みexit Subで良い気がしますがいかがでしょうか?
ボタン押下
↓
1〜2sec停止
↓
ボタンの処理を開始
という処理ならSleepかな?
いつもお世話になってるグラフです。
Private キーアップイベント関数()
何らか処理A
ここでイベントを受け付けたくない
次の処理Bを続けたいからExit Subもしたくない
何らか処理B
End Sub
このようなことをやりたいんでしょうか?
(1) 待ち方はたくさんあります。
・Sleep
アプリケーションがスリープします。要DLL知識
・While文でタイム監視
DoEventsをいれなければ、他のイベントは受け付けません
この間に発生したイベントは命令キューに残ります。
CPU使用率が高くなりますが...
・While & Timerを使う
TimerをEnable
While文でDoEventsをいれて、
TimerがDisableになるのを待つ。
Timerイベントでは、イベント発生時に、
TimerをDisableする。
発生させたくないイベントの最初には、
TimerがEnable中はExitSub
DoEventsしてるので、
この間に発生したイベントは処理されるので、
命令キューに残りません。
など、いろいろやり方はあります。
vb2003ならAPIではなく
System.Threading.Thread.Sleep(a) 'aはミリsec
でいけるはずです
Option Explicit
Private Sub Form_KeyPress(KeyAscii As Integer)
if KeyAscii <> vbKeyReturn Then Exit Sub
' Enter キーを押された時以外は、Exit Subされ何も処理しません。
' 特定のキーを押した時に行う処理を記載する。
End Sub
・1つのプロシージャーの中で一時的に(2〜3秒だけ)とめる
プログラムの例。
Private Sub Form_KeyPress(KeyAscii As Integer)
MsgBox "OKボタン押した後、3秒間プログラムをとめます。"
Call Sleep(3000)
MsgBox "3秒間プログラムをとめました。"
End Sub
#2〜3秒とめたいのと、特定のキーを押した時の関連をもう少し
詳しく知りたいかも・・・。
皆様のご指導ありがとうございます。私が使っているのは、.NET2003です。私が2・3秒だけ止めたい理由は、まさにグラフさんが指摘下さっている通り
Private キーアップイベント関数()
何らか処理A
ここでイベントを受け付けたくない
次の処理Bを続けたいからExit Subもしたくない
何らか処理B
End Sub
です。
キーについてですが、VB画面上に出したものに対して被検者は、
それがどれなのか該当するものを→←↑↓から選んで
もらいます。これを40回繰り返すのですが、被検者が4つの
矢印キーのどれかを押すと次のものを出すようにしています。
被検者にはいろいろな人がいるので、間違って
キーを連続で押してしまうこともあると思います。
それを防ぐために、如何したらよいかと考え、
プログラムを2〜3秒止めてしまえばと考えました。
したがって、Exit subをしてしまうと繰り返せなく困っているのです。
私の質問に対し、多くの方から貴重なご意見を賜ることが出来て嬉しく
思うとともに大変感謝致しております。1つ1つプログラムで試してみます。今後とも宜しくお願いします。
| ツイート |
|