■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#20091-0
フォームのキーアップイベントが2回発生するのですが・・。
いつもお世話になっております。
といっても投稿するのは初めてです。
よろしくお願い致します。

固定ダイアログにいくつかのコントルールを貼り付けて、全てのKeyUpイベントをフォーム
で受け取るようにしました。
しかし、コマンドボタンにフォーカスがある状態で、KeyUpイベントを発生させたところ、
フォームのKeyUpイベントが二回発生してしまいました。
同じ要領でKeyDownイベントをしらべましたが、こちらは一回しか発生していませんでした。
コマンドボタンのKeyUpイベントとフォームのKeyUpイベントで合わせて二回になるのかとも
思いましたが、それだとKeyDownイベントが1回しか起きない説明がつかず、コマンドボタン
のイベントなのになぜフォームのイベントとしてKeyUpイベントが起きるのか解りません。
なぜ、こうなるのかご存じの方、ご教授、ご指摘の程よろしくお願い致します。

Windows 2000 
Visual Basic 6.0
を使用しています。
#20100-0
RE#20091:フォームのキーアップイベントが2回発生するのですが・・。
> 固定ダイアログにいくつかのコントルールを貼り付けて、全てのKeyUpイベントをフォーム
> で受け取るようにしました。
> しかし、コマンドボタンにフォーカスがある状態で、KeyUpイベントを発生させたところ、
> フォームのKeyUpイベントが二回発生してしまいました。
> 同じ要領でKeyDownイベントをしらべましたが、こちらは一回しか発生していませんでした。
> コマンドボタンのKeyUpイベントとフォームのKeyUpイベントで合わせて二回になるのかとも
> 思いましたが、それだとKeyDownイベントが1回しか起きない説明がつかず、コマンドボタン
> のイベントなのになぜフォームのイベントとしてKeyUpイベントが起きるのか解りません。

 同じ開発環境ですが、こちらではそのような障害は見られません。KeyUp、KeyDownとも同様です。

 「全てのKeyUpイベントをフォームで受け取る」というのは、フォームのKeyPreviewプロパティを
Trueにしているということだと思います。このプロパティは、フォームがキーイベントを受け取るか
どうかを指定するもので、Trueにすると、フォームのキーイベント→フォーム上のコントロールの
キーイベントの順で確かにキーイベントは2回発生します。

 しかし、そのイベントを受け取るプロシージャはそれぞれ別ですので、フォームのKeyUpイベント
プロシージャは1回しか発生しないはずです。間違って、コマンドボタンのKeyUpイベントプロシージャ
にもフォームのKeyUpイベントプロシージャと同じ処理を入れてしまったりしていませんか?
#20107-0
RE#20100:フォームのキーアップイベントが2回発生するのですが・・。
回答ありがとうございます。

>  同じ開発環境ですが、こちらではそのような障害は見られません。KeyUp、KeyDownとも同様です。

申し訳ありません。
今試してみたところ、KeyDownにも同じ現象が現れてしまいました。
 
>  「全てのKeyUpイベントをフォームで受け取る」というのは、フォームのKeyPreviewプロパティを
> Trueにしているということだと思います。このプロパティは、フォームがキーイベントを受け取るか
> どうかを指定するもので、Trueにすると、フォームのキーイベント→フォーム上のコントロールの
> キーイベントの順で確かにキーイベントは2回発生します。

KeyPreviewプロパティはTrueにしています。

>  しかし、そのイベントを受け取るプロシージャはそれぞれ別ですので、フォームのKeyUpイベント
> プロシージャは1回しか発生しないはずです。間違って、コマンドボタンのKeyUpイベントプロシージャ
> にもフォームのKeyUpイベントプロシージャと同じ処理を入れてしまったりしていませんか?

同一フォーム上の他のコントロールにはKeyUpイベントプロシージャを記述していません。
#20109-0
RE#20107:フォームのキーアップイベントが2回発生するのですが・・。
> >  同じ開発環境ですが、こちらではそのような障害は見られません。KeyUp、KeyDownとも同様です。
> 申し訳ありません。
> 今試してみたところ、KeyDownにも同じ現象が現れてしまいました。
レス:
・「Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)」
・「Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)」
上記イベントの引数は、「KeyCode」・「Shift」が有ります。
引数「Shift」は、{Alt or Ctrl or Shift}キー押下で、評価されますが、
引数「KeyCode」でも評価されます。
故に、{Alt or Ctrl or Shift}キーと何か別のキー(仮に"A"〜"Z")を同時に押下した場合に、
イベントが2回実行されます。
例1:
「{Ctrl}+"A"」キーを押下すると、{Ctrl}キーが引数「KeyCode」に渡されイベントが1回発生する。
次に "A"キー押下時のイベントが発生しますので、計2回のイベントが発生する。
・・・引数「KeyCode」の評価は、キーを押す順番に既存します。
#20110-0
RE#20109:フォームのキーアップイベントが2回発生するのですが・・。
> レス:
> ・「Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)」
> ・「Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)」
> 上記イベントの引数は、「KeyCode」・「Shift」が有ります。
> 引数「Shift」は、{Alt or Ctrl or Shift}キー押下で、評価されますが、
> 引数「KeyCode」でも評価されます。
> 故に、{Alt or Ctrl or Shift}キーと何か別のキー(仮に"A"〜"Z")を同時に押下した場合に、
> イベントが2回実行されます。
> 例1:
> 「{Ctrl}+"A"」キーを押下すると、{Ctrl}キーが引数「KeyCode」に渡されイベントが1回発生する。
> 次に "A"キー押下時のイベントが発生しますので、計2回のイベントが発生する。
> ・・・引数「KeyCode」の評価は、キーを押す順番に既存します。

さだ殿
丁寧な回答ありがとうございます。
今ちょっと確認してみましたが、
ひとつのキーをUpした状態でもやはりイベントが2回おきてしまいました。

実は今、新たな発見があったのですが、
Microsoft Forms 2.0 Object Libraryにあるコマンドボタンコントロールに、
フォーカスがあたっている時KeyUpイベントを発生させると、
このイベントが2回おきました。
上記現象についてもしくは、上記コントロールについてご教授頂けないでしょうか?
よろしくお願い致します。
#20115-0
RE#20110:フォームのキーアップイベントが2回発生するのですが・・。
> 今ちょっと確認してみましたが、
> ひとつのキーをUpした状態でもやはりイベントが2回おきてしまいました。

横入りですが、簡単にコードを書いてみたらいかがでしょうか。全部書けとはいいませんが、骨組み
だけでも書かれては?
少なくとも「どのキー」をUpした時に「どんなイベント」が発生するかだけでもわからないと・・・
#20116-0
RE#20110:フォームのキーアップイベントが2回発生するのですが・・。
> 実は今、新たな発見があったのですが、
> Microsoft Forms 2.0 Object Libraryにあるコマンドボタンコントロールに、
> フォーカスがあたっている時KeyUpイベントを発生させると、
> このイベントが2回おきました。
レス
この現象を確認致しました。
「Microsoft Forms 2.0 Object Library」は、ActiveXのコンポーネントですね。
そして、VBAのコンポーネントと認識しています。
このコンポーネントが持つ、フォーカスがセットができる、コントロールをいくつか試しましたところ、
コマンドボタン以外に、チェックボックスとテキストボックスが同じ現象が起きると確認しました。
バグっぽいですね。僕には分かりません。VB6の標準コンポーネントは、その現象は起きません。
もしVBA上での作業なら、「VBスクリプト掲示板」で対応してくれるかもしれません。
VB6上で行っているなら、VB6の標準コンポーネントのコントロールをなるべく使用した方が、
無難ですね。同じようなコントロールがあるんですから。
#20122-0
RE#20116:フォームのキーアップイベントが2回発生するのですが・・。
> この現象を確認致しました。
> 「Microsoft Forms 2.0 Object Library」は、ActiveXのコンポーネントですね。
> そして、VBAのコンポーネントと認識しています。
> このコンポーネントが持つ、フォーカスがセットができる、コントロールをいくつか試しましたところ、
> コマンドボタン以外に、チェックボックスとテキストボックスが同じ現象が起きると確認しました。
> バグっぽいですね。僕には分かりません。VB6の標準コンポーネントは、その現象は起きません。
> もしVBA上での作業なら、「VBスクリプト掲示板」で対応してくれるかもしれません。
> VB6上で行っているなら、VB6の標準コンポーネントのコントロールをなるべく使用した方が、
> 無難ですね。同じようなコントロールがあるんですから。

この質問を匿名で投稿していたしんです。

さだ殿
VB6上で用いています。
有力情報ありがとうございます。

たもつ殿
ご指摘ありがとうございます。
キーに関しては全てのキーが該当しました。
ファンクションキーも含めてすべてでした。
イベントとはForm_KeyUpです。
このページと関連する記事:
#13607-0矢印キーの検出方法2000-12-22(金) 10:41
#12085-0ボタン類の矢印キーのイベント取得の方法は無いのでしょうか?1999-12-20(月) 18:27
#2962-0ショートカットキー??1999-11-04(木) 13:35
#28591-0コマンドボタン KeyDownイベントで 矢印キーを検出したい。2000-08-24(木) 13:54
#16065-0コマンドボタンのKeyDownイベント2000-11-08(水) 18:59
#14938-0コマンドボタン上での矢印キー2001-03-08(木) 14:14
#2018-0KeyDonw イベントでの KeyCode の値1999-07-26(月) 12:05
#11491-0キーボードのじゅうじキーによる操作2000-09-18(月) 12:18
#13927-0Enter(Return)キーの取得方法2001-01-16(火) 21:39
#5751-0cmdボタンにファンクションキーを割付る1999-12-16(木) 13:53
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)