dポイントプレゼントキャンペーン実施中!

VB6.0を使用しておりますが、
コンボボックスのリストから選択して値を変更しても
Changeイベントが発生しないです。
コンボボックスの入力欄に直接入力した場合はChangeイベントは
発生します。
リストから選択して、Changeイベントを発生されるには
どうしたら良いでしょうか?

A 回答 (2件)

'コンボボックスに追加


Private Sub Form_Load()
Combo1.AddItem "AAA"
Combo1.AddItem "BBB"
Combo1.AddItem "CCC"
End Sub
'コンボボックスの入力欄に直接入力した場合
Private Sub Combo1_Change()
Debug.Print Combo1.Text
End Sub

'リストから選択して、Changeイベントを発生
Private Sub Combo1_Click()
Call Combo1_Change
End Sub
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
この方法で希望する動きが実現できました。
改めて応用力が必要と痛感しました。
勉強になりました。

お礼日時:2008/08/09 15:39

MSDNにChangeイベントはTextボックスの内容を変更した際に発生するものであり 矢印キーやドロップダウンリストから選択された場合は発生しないと明記されています



どうしてもということであれば CBN_SELCHANGEメッセージ捕まえてChangeイベントを起こすしかないようです

Combo1_ChangeをPrivateからPublicに変更します
標準モジュールを追加して
Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hwnd As Long, _
  ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias _
"CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
  ByVal hwnd As Long, ByVal Msg As Long, _
  ByVal wParam As Long, ByVal lParam As Long) As Long

Public Const GWL_WNDPROC = (-4)
Public Const CBN_SELCHANGE = 1

Global lpWndProc As Long

Public Function ComboProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  Dim NM As Long
  ComboProc = CallWindowProc(lpWndProc, hwnd, uMsg, wParam, lParam)
  NM = (wParam And &HFFFF0000)
  If NM = CBN_SELCHANGE * &H10000 Then
    Form1.Combo1_Change
  End If
End Function
を記述します

Form1のLoadイベントとQueryUnLoadイベントを追加します
Loadイベントで
  lpWndProc = SetWindowLong(Combo1.hwnd, GWL_WNDPROC, AddressOf ComboProc)
QueryUnloadイベントで
  SetWindowLong Combo1.hwnd, GWL_WNDPROC, AddressOf lpWndProc
を記述します

これで選択を変更した際に Changeイベントが呼ばれます

ただし、WindowProcを書き換えているのでVB上から実行した際にブレークポイントなどを設定していると VBのシステム自体が落ちてしまいます
Debug.Printなどで 変数をインディエイトに表示することは可能です
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
API関係は詳しくない為、このような方法があるとは知りませんでした。
専門的な知識に感謝いたします。

お礼日時:2008/08/09 15:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A