■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#17431-0キーイベントレバー2001-08-27(月) 11:34
     #17432-0RE#17431:キーイベントよねKEN2001-08-27(月) 11:54
     #17433-0RE#17431:キーイベントレベル112001-08-27(月) 12:37
     #17439-0RE#17433:キーイベントレバー2001-08-27(月) 17:10
     #17440-0RE#17439:キーイベントDuck2001-08-27(月) 17:23
     #17441-0RE#17440:キーイベントレバー2001-08-27(月) 18:07
     #17442-0RE#17441:キーイベントレベル112001-08-27(月) 18:58
     #17443-0RE#17442:キーイベントレバー2001-08-27(月) 19:53
     #17444-0RE#17443:キーイベントレベル112001-08-27(月) 20:54
     #17448-0RE#17444:キーイベントよねKEN2001-08-28(火) 09:16
     #17454-0RE#17448:キーイベントレバー2001-08-28(火) 12:04
#17431-0
キーイベント
お世話になっております。お久しぶりです。
Do-Loop中で
”もしF1キーが押されたら”というコマンドを書きたいのですが、
どうしたらよいでしょうか?

IF Keydown(F1) then

ではだめでした。
単純ではありますがよろしくお願いします。
#17432-0
RE#17431:キーイベント
> お世話になっております。お久しぶりです。
> Do-Loop中で
> ”もしF1キーが押されたら”というコマンドを書きたいのですが、
> どうしたらよいでしょうか?

VBはイベントドリブンなので、基本的にDo〜Loop等で
キーが押されたかどうかチェックするのではなく、
キーが押されたらイベントが発生するので、そのイベント処理の中で
やるべきことを書きます。
 
KeyDownイベントを調べて下さい。
#17433-0
RE#17431:キーイベント
> Do-Loop中で
> ”もしF1キーが押されたら”というコマンドを書きたいのですが、
> どうしたらよいでしょうか?
> 
> IF Keydown(F1) then
> 
> ではだめでした。
> 単純ではありますがよろしくお願いします。

#そういう考え方をなさる方はWin以前のC言語ユーザーが多いですね。
#過去のメインループの発想は捨て去りましょう。
#Winはメッセージループの概念です(VB初心者には必要ない概念ですが)

DoEvants の使用例を応用すると良いかと思いますよ。
#17439-0
RE#17433:キーイベント
> > Do-Loop中で
> > ”もしF1キーが押されたら”というコマンドを書きたいのですが、
> > どうしたらよいでしょうか?
> > 
> > IF Keydown(F1) then
> > 
> > ではだめでした。
> > 単純ではありますがよろしくお願いします。
> 
> #そういう考え方をなさる方はWin以前のC言語ユーザーが多いですね。
> #過去のメインループの発想は捨て去りましょう。
> #Winはメッセージループの概念です(VB初心者には必要ない概念ですが)
> 
> DoEvants の使用例を応用すると良いかと思いますよ。

ありがとうございます。
以上のアドバイスから以下のように別にルーチンを作りました。

Private Sub Text2_KeyDown(KeyCode As Integer, Shift As Integer)
dim st As Variant 
If KeyCode = vbKeyF1 Then ’F1キーを押す
Text2.Text = st    ’テキストボックス2にst値を入れる
End If
End Sub

ですが、うまく動きません。
ヘルプにkeydownは推奨しません、などと書いてあったりして困惑してます。
お手数ですがよろしくお願いします。
#17440-0
RE#17439:キーイベント
> Private Sub Text2_KeyDown(KeyCode As Integer, Shift As Integer)
> dim st As Variant 
> If KeyCode = vbKeyF1 Then ’F1キーを押す
> Text2.Text = st    ’テキストボックス2にst値を入れる
> End If
> End Sub
> 
> ですが、うまく動きません。
> ヘルプにkeydownは推奨しません、などと書いてあったりして困惑してます。
> お手数ですがよろしくお願いします。
どううまく動かないのでしょうか?
少なくとも、stが何も設定されていないので、テキストボックスに何を表示したいのか
解りませんが・・・
#17441-0
RE#17440:キーイベント
> > Private Sub Text2_KeyDown(KeyCode As Integer, Shift As Integer)
> > dim st As Variant 
> > If KeyCode = vbKeyF1 Then ’F1キーを押す
> > Text2.Text = st    ’テキストボックス2にst値を入れる
> > End If
> > End Sub
> > 
> > ですが、うまく動きません。
> > ヘルプにkeydownは推奨しません、などと書いてあったりして困惑してます。
> > お手数ですがよろしくお願いします。
> どううまく動かないのでしょうか?
> 少なくとも、stが何も設定されていないので、テキストボックスに何を表示したいのか
> 解りませんが・・・

F1キーを押しても反応しないのです。
またst値ですが、これは1秒毎に変化する値です。バリアント型で他のテキストボックスには
表示可能でした。
以上お願いします。
#17442-0
RE#17441:キーイベント
> F1キーを押しても反応しないのです。
KeyDownの中でDim宣言しているのですから、
よその 変数 st とは全くの別物です。コードを見る限り
初期化している場所がどこにもないので、何も出ないのは当たり前です。

> またst値ですが、これは1秒毎に変化する値です。バリアント型で他のテキストボックスには
> 表示可能でした。
そもそも、何の業務目的で、このような処理を行っているのでしょう?
もし、1秒待つ為のDo Loopなら止めた方が良いです。
#17443-0
RE#17442:キーイベント
> > F1キーを押しても反応しないのです。
> KeyDownの中でDim宣言しているのですから、
> よその 変数 st とは全くの別物です。コードを見る限り
> 初期化している場所がどこにもないので、何も出ないのは当たり前です。
> 
> > またst値ですが、これは1秒毎に変化する値です。バリアント型で他のテキストボックスには
> > 表示可能でした。
> そもそも、何の業務目的で、このような処理を行っているのでしょう?
> もし、1秒待つ為のDo Loopなら止めた方が良いです。

すみません。実はstは標準モジュールの中でpublic変数で定義しています。
またdo loopは任意のテキストボックスに表示する値を1秒毎に変化させるため
のものです。この1秒毎に変化している値の中で任意の値を他のテキストボックス
に表示することがねらいです。
で、解らない点を把握するため単純化してForm1にテキストボックス1
のみを書いて以下のようなコードを書いたのですがやはり動きません。
根本的に解っていないようです。
お手数ですがよろしくお願いします。

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)  
 If KeyCode = vbKeyF1 Then ’F1キーを押す 
  Text1 = 1             ’テキストボックス1に値1を入れる
  End If
 End Sub


#17444-0
RE#17443:キーイベント
> すみません。実はstは標準モジュールの中でpublic変数で定義しています。
変数の宣言は一番ローカルなものを優先して参照します。
ですので、Publicのものを参照したくばKeyDownの中のDim宣言部分を削除しましょう。
#グローバル変数かローカル変数か、名前で判る様にしておけば、このようなミスは激減します。

> またdo loopは任意のテキストボックスに表示する値を1秒毎に変化させるため
> のものです。この1秒毎に変化している値の中で任意の値を他のテキストボックス
> に表示することがねらいです。
この作業を行いたいなら、タイマーコントロールを使いましょう。でないとCPUを占有して
非常に多大な負荷を掛ける事になります。
時間稼ぎの為のループはやってはいけません。

タイマーを使って約1秒ごとにカウントUPする簡単なサンプルを書きます
(用意するもの フォーム、ラベル、タイマーコントロール)
Private Sub Form_Load()
    Timer1.Interval = 1000
    Label1.Caption = 0
End Sub
Private Sub Timer1_Timer()
    Label1.Caption = Label1.Caption + 1
End Sub
#タイマーのIntervalはそんなに正確ではないのであしからず。

> で、解らない点を把握するため単純化してForm1にテキストボックス1
> のみを書いて以下のようなコードを書いたのですがやはり動きません。
> Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)  
>  If KeyCode = vbKeyF1 Then ’F1キーを押す 
>   Text1 = 1             ’テキストボックス1に値1を入れる
>   End If
>  End Sub
こちらではしっかりTextBoxに"1"が表示されますが?
#17448-0
RE#17444:キーイベント
> > で、解らない点を把握するため単純化してForm1にテキストボックス1
> > のみを書いて以下のようなコードを書いたのですがやはり動きません。
> > Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)  
> >  If KeyCode = vbKeyF1 Then ’F1キーを押す 
> >   Text1 = 1             ’テキストボックス1に値1を入れる
> >   End If
> >  End Sub
> こちらではしっかりTextBoxに"1"が表示されますが?

元の話として、1秒間隔で値を変えるためにDo〜Loopがあるという話だったので、
それが別のところで動いていてイベントを拾えていないだけではないでしょうか?
#17454-0
RE#17448:キーイベント
> > > で、解らない点を把握するため単純化してForm1にテキストボックス1
> > > のみを書いて以下のようなコードを書いたのですがやはり動きません。
> > > Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)  
> > >  If KeyCode = vbKeyF1 Then ’F1キーを押す 
> > >   Text1 = 1             ’テキストボックス1に値1を入れる
> > >   End If
> > >  End Sub
> > こちらではしっかりTextBoxに"1"が表示されますが?
> 
> 元の話として、1秒間隔で値を変えるためにDo〜Loopがあるという話だったので、
> それが別のところで動いていてイベントを拾えていないだけではないでしょうか?

おかげさまで動きました。問題だったのは宣言するオブジェクトがフォーカスのものになっていない
ことでした。Do〜Loop中でも作動しました。お手数をお掛けして申し訳ござませんでした。
このページと関連する記事:
#28341-0テキストボックスでEnterキーが押された時に音が鳴ってしまう2002-04-21(日) 12:25
#16374-0キーコード236について2000-11-17(金) 23:08
#8987-010キーを押したときの内容変更2000-03-27(月) 12:43
#2465-0テキストボックスでの上書き1999-10-03(日) 17:21
#1657-0KeyDownイベント内の処理がうまくいかない。1999-09-09(木) 10:39
#29237-0タブキーの入力チェック2002-06-07(金) 09:15
#8831-0チェックボックスからEnterキーでフォーカスを動かしたい!2000-03-22(水) 14:30
#11404-0カーソルって??1999-12-10(金) 15:17
#6633-0keyDownイベントで移動キーを検出しない。2002-04-08(月) 09:29
#45770-0keydownでsetfocus2001-08-09(木) 18:11
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)