
はじめまして。
VB6.0 SP5で開発を行っております。
子フォームが開いていない状態のMDI親フォームで、F1~F12のファンクションキーを押下したら、それぞれ対応した子フォームが開くようにしたいのですが、MDI親フォームでは、KeyUpやKeyDownのイベントが発生しないため、キー入力監視ができません。
上記のような事を実現させるためには、どのようにすればよろしいのでしょうか。
MDI親フォームには、PictureBoxを貼りその中にボタンを設置して、マウスクリックでも子フォームを開くようにしています。PictureBoxでKeyイベントを取得しようとしましたが、ボタンをクリックして、子フォームを開き、その子フォームを閉じた後(子フォームのUnLoadイベント内で親フォームのPictureBoxにSetFocusしています)、フォーカスがどこかへ行ってしまい、イベントがとれません。
常に、子フォームを開いている状態で、子フォームでKeyイベントを取得するしかないのでしょうか。その場合、子フォームを閉じた時に、別のフォーム(Keyイベント取得用フォーム)を自動的に開く方法はありますでしょうか。
長文となり申し訳ありません。
ご教授の程、よろしくお願い致します。
開発環境
OS:WindowsXP SP3
言語:VisualBasic6.0 SP5
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
たぶんファンクションキーにて起動する子フォームの変数を
Dummyフォームのメンバー変数として Dimなどで宣言しているのでしょう
その場合CloseボタンでTerminateが発生しません
Dummyフォームに起動したフォームを扱うプロパティを設置します
public Property Get SubForm1 as SubForm
' objForm1がDim宣言された子フォーム
Set SubForm1 = objForm1
End Property
Public Property Set SubForm1( frm as SubForm)
' objForm1をNothingに設定するために使用
Set objForm1 = frm
End Property
といった具合にしておきます
MainForm_Testで
if not Dummy.SubForm1 is Nothing then
Set Dummy.SubForm1 = nothing
Exit Sub
end if
MDIForm_Activate
といった具合でうまくいきませんか
SubForm側はUnloでとTerminateの両方に
MDIForm1.Test
を記述しておきます
当方は dummyには SubForm用の変数を準備することなく組んだので
Terminateイベントがそのまま利いてしまいました
redfox63様
丁寧なご説明ありがとうございます。
>たぶんファンクションキーにて起動する子フォームの変数を
>Dummyフォームのメンバー変数として Dimなどで宣言しているのでしょう
ご指摘の通りでした。
お教えいただいた方法を、これから試してみます。
ありがとうございました。
No.1
- 回答日時:
1つダミーの子フォームを追加してはいかがでしょう
このダミーのフォームのKeyDownイベントで F1-F12に対して子フォームを作成するようにします
仮に Dummy という名前の子フォームだとします
Dummyフォームの BorderStyleを『0-なし』にしておきます
これをしないと ダミーが見えてしまいます
次にMDIFormにPublicなメソッドを1つ追加します
Public Sub Test()
MDIForm1_Activate
End Sub
MDIFormのアクティベイトイベントに
If ActiveForm Is Nothing then
dummy.Visible = False
dummy.WindowState = VbMaximized
dummy.Show
End If
追加される子フォームのTerminateイベントで
MDIForm1.Test
といった具合でどうでしょう
redfox63様
早速のご回答有難うございます。
教えていただいた方法を試してみました。
DummyのWindowStateが最大の場合、子フォームを開いて、閉じた後、Dummyでのキーイベントの取得ができないようです。
DummyのWindowStateを標準にした場合は、子フォームを閉じた後でもDummyでのキーイベントが取得できました(ただし、MDIフォーム内にDummyが表示されてしまいます)。
また、デバッグモードで見てみたのですが、子フォームを閉じた後(子フォームのTerminateイベントにMDIForm1.Testを記述したんですが、Terminateイベントが発生しないみたいで、Unloadイベントに記述しました)の処理のMDIForm1のMDIForm_ActivateでのIf ActiveForm Is Nothing thenがFalseになっているのか、if文内の処理がスルーされてしまいました。
これは、子フォーム側のプロパティの設定等が必要なのでしょうか?
申し訳ありませんが、ご回答のほどよろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VB.net フォーム 親子 1 2022/07/04 19:00
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- Access(アクセス) Accessで独自メニューバーまたはリボンを作成したい 1 2022/12/02 14:31
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) MSaccessのレポートを開く 2 2022/09/01 13:16
- Access(アクセス) accessについて(超初心者です) 1 2023/02/11 11:18
- JavaScript ソースコードは下の共有コードサイト「張り紙」にあります。 入力フォームの javascript で 1 2022/05/11 11:01
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
エクセルVBA フォーム上でOnkey...
-
C# 2010 printPreviewDialogの...
-
VB.NETでフォームロード中のエ...
-
Formサイズの最小値
-
【VBAユーザーフォームで閉じる...
-
accessのフォーム上でで画像を...
-
VB.NET:モーダルで表示したフ...
-
【Excel VBA】ユーザフォームを...
-
VBのフォームをスクロールさせ...
-
VBA(エクセル)のユーザー...
-
VBAでコントロールの数をカウン...
-
EXCEL ユーザーフォームのタイ...
-
EXCEL VBA ユーザーフォームの...
-
Form_Load と Form_Activate の...
-
VB6(SP5) 無限ループ
-
ユーザーフォーム上に現在日時...
-
VBAでユーザーフォームを再表示...
-
picturebox の BackColor は透...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
VBAでユーザーフォームを再表示...
-
Form_Load と Form_Activate の...
-
ユーザーフォームのテキストボ...
-
Microsoft Formsの「個人情報や...
-
モーダルフォームとモードレス...
-
クリックイベントなのに、2回ク...
-
ACCESSのフォーム、開くんです...
-
VBA(エクセル)のユーザー...
-
Hideについて(.NET)
-
エクセルVBAのフォームを最...
-
ユーザーフォーム上に現在日時...
-
VB.NETでフォームロード中のエ...
-
(Excel+VBA)ユーザーフォームの...
-
フォームウィンドウを最前面に...
-
アクセス2013 フォームが...
-
コントロールの存在確認
-
Access VBA コントロールの参照...
-
ブックをCloseまたはQuitで閉じ...
おすすめ情報