Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


560 / 2272 ツリー ←次へ | 前へ→

【11153】ベースフォームをつくるためのクラス実装 sue 09/6/5(金) 17:38 質問[未読]
【11154】Re:ベースフォームをつくるためのクラス実装 YU-TANG 09/6/5(金) 22:28 回答[未読]

【11153】ベースフォームをつくるためのクラス実装
質問  sue  - 09/6/5(金) 17:38 -

引用なし
パスワード
   ベースフォームを作っています。
以下のように実装したらF1押下によってメッセージボックスが開くはずですが、何もイベントが発生しません。
原因がわかる方いますでしょうか?
フォームモジュール
Private Sub Form_Load()
Dim ClsForm As New cls_BaseForm
Set ClsForm.BaseForm = Me.Form
End Sub
クラスモジュール
Private WithEvents cls_BaseForm As Access.Form
Public Property Set BaseForm(ByVal CtlBaseForm As Access.Form)
Set cls_BaseForm = CtlBaseForm
cls_BaseForm.InsideWidth = FORM_WIDTH'定数
cls_BaseForm.InsideHeight = FORM_HEIGHT'定数
cls_BaseForm.Main.BackColor = FORM_COLOR'定数
cls_BaseForm.KeyPreview = True
cls_BaseForm.OnKeyDown = "[Event Procedure]"

End Property

Public Property Get BaseForm() As Form
Set BaseForm = cls_BaseForm
End Property

Private Sub cls_BaseForm_KeyDown(KeyCode As Integer, Shift As Integer)

  If KeyCode = vbKeyF1 Then
MSGBOX "A"
  ElseIf KeyCode = vbKeyF2 Then

  ElseIf KeyCode = vbKeyF3 Then
  
  ElseIf KeyCode = vbKeyF4 Then
  
  ElseIf KeyCode = vbKeyF5 Then
  
  ElseIf KeyCode = vbKeyF6 Then
  
  ElseIf KeyCode = vbKeyF7 Then
  
  ElseIf KeyCode = vbKeyF8 Then
  
  ElseIf KeyCode = vbKeyF9 Then
  
  ElseIf KeyCode = vbKeyF10 Then
  
  ElseIf KeyCode = vbKeyF11 Then
  
  ElseIf KeyCode = vbKeyF12 Then
  
  End If
End Sub

【11154】Re:ベースフォームをつくるためのクラス...
回答  YU-TANG  - 09/6/5(金) 22:28 -

引用なし
パスワード
   こんばんは、YU-TANG です。

▼sue さん:
>原因がわかる方いますでしょうか?
>フォームモジュール
>Private Sub Form_Load()
>Dim ClsForm As New cls_BaseForm

オブジェクト変数の宣言がプロシージャ レベルなので、
一瞬でインスタンスが破棄されるのが原因。
モジュールレベルで宣言すると良いでしょう。

とりあえず下記で、変数の有効期間について基礎知識を
入れると今後の役に立つと思います。

オブジェクト変数の適用範囲
ht tp://msdn.microsoft.com/ja-jp/library/cc376601.aspx

それでは。

560 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078197
(SS)C-BOARD v3.8 is Free