先ほど、コンボボックスの選択でうまく行ったと書きましたが、結局、チェンジイベントが発生せず見かけ上、選択されたようになっていました。
Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByVal hwnd As Integer,_
ByVal wMsg As Integer, _
ByVal wParam As Integer, _
ByVal lParam As String) As Integer
Const CB_SELECTSTRING = &H14D
SendMessage(hWnd, CB_SELECTSTRING, -1, "Printer A")
このような方法で、チェンジイベントまで発生させることが可能でしょうか?
んーと、CB_FINDSTRINGEXACTで検索して、それを選択するとか?
…もしかしたら.NET Frameworkにそんなメソッドがあるかもしれませんが。
ご回答ありがとうございます
このようにやってみました
dim idx As Integer
idx = SendMessage(cmbTest.Handle, CB_FINDSTRINGEXACT, -1, "Printer A")
If idx >= 0 Then
SendMessage(cmbTest.Handle, CB_SETCURSEL, idx, 0)
End If
やっぱし、チェンジイベントが発生しません
CB_FINDSTRINGEXACTでちゃんとインデックスが取得できて、CB_SETCURSELで表示上はうまく選択できています
すみません、このスレッドから見られて方に環境の説明がありませんでした
VB2005です
やっぱりFindStringExactメソッドがありますね:
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.combobox_members(VS.80).aspx
検索するインタフェイスが用意されているのならば、
検索結果を選択するインタフェイスも用意されているのではないでしょうか?:
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.combobox.selectedindex.aspx
(かも)
CB_SETCURSEL なり CB_SELECTSTRING なりで変更したあと、WM_COMMAND(&H111) で CBN_SELCHANGE を[親]ウィンドウに送信してあげてください。
返事が遅れまして申し訳ありません。
ガッさん、ご回答感謝いたします。
いろいろとやってみたのですが、この方法だとComboboxのインスタンスが必要で他プログラムのウィンドウズハンドルからインスタンスへの変換が分からず行き詰まりました。
Hongliangさん、ありがとうございます。
こちらも、いろいろと試して見たのですがうまくいきません。
Const WM_COMMAND = &H111
Const CBN_SELCHANGE = &H1
SendMessage(OyaHandle, WM_COMMAND, CBN_SELCHANGE, comboHandle)
このようにしてみたのですが・・・・
WM_COMMAND はちょっと変な形式でして。
WPARAM に指定する通知コードは、上位 16 ビットで指定します。
下位 16 ビットはコントロールの ID ですが、これは 0 で問題ないようです。
幸い、VB には VB7.1(VB.NET 2003) からビットシフト演算子が追加されたので、これで CBN_SELCHANGE の値を左に 16 ビットシフトしてやれば良いでしょう。
Hongliangさん、ありがとうございます。
無事解決できました。
CBN_SELCHANGEの値を16ビット左にシフトした結果の&H10000を指定することでできました
そして、SendMessageではなくPostMessageにしたらOKでした。
Public Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByVal hwnd As Integer, _
ByVal wMsg As Integer, _
ByVal wParam As Integer, _
ByVal lParam As String) As Integer
Public Declare Function PostMessage Lib "user32" _
Alias "PostMessageA" (ByVal hwnd As Integer, _
ByVal wMsg As Integer, _
ByVal wParam As Integer, _
ByVal lParam As Integer) As Integer
Const CB_SELECTSTRING = &H14D
Const WM_COMMAND = &H111
Const CBN_SELCHANGE = &H10000
SendMessage(ComboHandle, CB_SELECTSTRING, -1, "Printer A")
PostMessage(OyaHandle, WM_COMMAND, CBN_SELCHANGE, ComboHandle)
| ツイート |
|