- ベストアンサー
VB(6.0)上でファンクションキーを押下出来ない
VB(6.0)を使用して開発されたプログラムを改定しています。 画面上にボタンが配置されファンクションキーをF1~F12まで 割り当てています。 その中であるFoamだけF3,F5を押下するとプログラムが 強制終了されてしまいます。 マウスでクリックすると問題なく処理されます。 また別の画面ではF1~F12まで問題なく押下出来ます。 原因が分かりません。コーディングで対応出来るものでしょうか。 ご指導よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
CALL先はコマンドボタンですが、これってコントロール配列ですよね? hoge_Click(Index As Integer) フォーム自体のKeyDownを見ているとしたら、 hoge_KeyDown(KeyCode As Integer, Shift As Integer) となりますが、KeyCodeは取得出来てもコマンドボタンのIndexが取得出来ないのでは? ファンクションキーのKeyDownからコントロール配列ClickのCALLは書いた事がありませんので何とも云えませんが、 やはり全コードが分からないので、どこが悪いとは言えませんね。 開示して頂いたコードは特定のFキー(F3,F5)の実行コードでしょうか? 他のフォームでは問題が無いとの事ですが、正常に動作しているフォーム上のコードと、 エラーになるフォーム上のコードの違いはありませんか?
その他の回答 (2)
- kiki_s
- ベストアンサー率59% (147/248)
>そのclickを呼び出すように書かれています。 つまり、こういう感じですね。 (呼び出し元、先ともPrivateとした場合) Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyF12 Then Call hoge_Click End If End Sub Private Sub hoge_Click() 実行コード End Sub 呼び出し先のPrivate Sub hoge_Click()のコードは開示出来ますか?
お礼
仰るとおりです。 それぞれのコードは以下のようになっています。 Private Sub CMD_BTN_Click(Index As Integer) Select Case Index Case 0 DoEvents Text1.SetFocus Call Sub_Unload End Select End Sub Private Sub Sub_Unload() Unload FRM_MEISAI_04CH Set FRM_MEISAI_04CH = Nothing End Sub 以上です。 何卒よろしくお願いいたします。
- kiki_s
- ベストアンサー率59% (147/248)
どのようなコードで書かれているのか分かりませんが、 マウスでの操作は問題ないのであれば、キー入力イベントは別コードなのでしょう。 KeyDownイベントでキーを見ているなら、書式は、Form_KeyDown(KeyCode As Integer, Shift As Integer)ですが、 該当フォームのKeyPreviewプロパティをTrueにしないと、キーイベントを拾ってくれなかったと思います。 開発環境下で正常に動作しても、実行ファイルで正常に動作するとは限りません。 開発環境下で、該当コードにブレークポイントを掛けて、ステップ実行すれは、エラーになる部分は分かるはずですが、 開発環境下でのKeyDownイベントはKeyPreviewプロパティがFalseになっていてもエラーは吐かなかったと思いますが。
お礼
ご回答、ありがとうございます。 私の開示している情報が足りなさ過ぎでした。 申し訳ございません。 まずFoamのKeyPreviewプロパティはTrueになっています。 そのFoamにはF1からF12まで機能が割り当てられているのですが 一部、F3とF5の時のみexeが強制終了されてしまいます。 必要な機能はコマンドボタンのClickイベントに直接記述されていて ファンクションを押下した時(KeyDown)は そのclickを呼び出すように書かれています。 別のF1、F2、F4キーなどは問題ないのですがF3、F5キーのみ 強制終了されてしまいます。 また開発環境(デバッグ)では問題がおきず実行環境のみ起きています。 今は障害のあるファンクションキーを無効にしてエラーを回避していますが 一時しのぎである事から何とか解決したいのですが何分VB6での こういった障害経験が乏しい為対策出来ずにいます。 もしこの情報で何かわかる事がございましたら教えていただけないでしょうか。 また、不足している情報を教えていただければ可能な範囲で開示させていただきます。 宜しくお願いいたします。
お礼
kiki_s様 この度は色々ありがとうございました。 解決しました。 VB上での問題ではありませんでした。 前任者は今回のプログラムにはグレープシティ社のINPUTMANを 使用していました。 Webで調べたらバージョンがかなり古く、その為色々な不具合を含んでいました。 その中に、『INPUTMANの項目を使用してその項目にカーソルがある場合、 UnLoad時にプログラムが強制終了される』という事例を見つけたんです。 試しにラジオボタンなどINPUTMAN以外の項目にカーソルがある場合は エラーで落ちませんでした。 バグフィクスされた物を入手できれば『恐らく』解決すると思います。 少ない情報なのにご丁寧に対応いただきありがとうございました。<m(__)m>