- ベストアンサー
Ver.6.0で動的コントロールのプロパティについて
フォーム上で、 動的コントロール=コンボボックスの宣言をし、 標準モジュールで、動的コントロールを実際に追加したいコードを作る時、サイズ(Left、Top、)や状態(Visible)などの設定はできるのですが、 Sorted(コンボボックス内での自動昇順)やStyle(コンボボックスの種類)等の、設定がソース上で出来ません。 どうすれば、ソース上で、設定できるのでしょうか。 問題のコードをデバッグすると、デザイン上でしか、設定出来ませんとメッセージが表示され、実現不可能な事を言われています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
何度もすみません、もし良ければ下記コードを参考にして下さい。 (標準モジュール) '*** コンボボックスを作成する関数 ******************************************* Public Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" _ (ByVal dwExStyle As Long, ByVal lpClassName As String, _ ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, _ ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, _ ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, _ lpParam As Any) As Long '*** 作成したコンボボックスを破棄する関数 *********************************** Public Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long '*** コンボボックスの項目を追加する関数 ************************************* Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _ ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Const WS_CHILD = &H40000000 '子ウィンドウ Public Const WS_VISIBLE = &H10000000 '表示する Public Const CBS_DROPDOWN = &H2& 'Styleプロパティ(ドロップダウン) Public Const CBS_SORT = &H100& 'Sortedプロパティ(並び替える) Public Const CB_ADDSTRING = &H143 '項目追加 Public lngRet As Long '戻り値 Public Sub CreateComb() Dim lngSendRet As Long '戻り値 '*** ComboBox1という名前で既存のフォームにStyle(ドロップダウンコンボ) ****** '*** Sorted(True)のコンボボックスを作成 ****** lngRet = CreateWindowEx(0, "ComboBox", "ComboBox1", _ WS_CHILD Or WS_VISIBLE Or CBS_DROPDOWN Or CBS_SORT, _ 0, 0, 100, 100, Form1.hwnd, 0, 0, 0) '*** 作成したコンボボックスの項目を追加 ************************************ lngSendRet = SendMessage(lngRet, CB_ADDSTRING, 0, ByVal "a") lngSendRet = SendMessage(lngRet, CB_ADDSTRING, 0, ByVal "い") lngSendRet = SendMessage(lngRet, CB_ADDSTRING, 0, ByVal "あ") End Sub Public Sub DestroyComb() '*** 作成したコンボボックスを破棄 ****************************************** lngRet = DestroyWindow(lngRet) End Sub (フォーム) Private Sub Form_Load() Call CreateComb End Sub Private Sub Form_Unload(Cancel As Integer) Call DestroyComb End Sub 上記を実行されますとコンボボックスが作成され、 a あ い という項目が3行追加され並び替えも正しく行われました。 コンボボックスのStyle、Sortedプロパティはデザイン時にしか設定が 出来ないので、上記方法を記載しましたが他に良い方法があるかも知れません。
その他の回答 (1)
まだ確認が不十分ですが、APIのCreateWindowExを使い dwStyleパラメータに定数CBS_SORTを指定して コンボボックスを作成されてはどうでしょうか? 尚、上記関数でコンボボックスの作成は確認しましたが AddItemでの項目追加が出来ないのでSendMessage関数を 使って項目の追加を行わなければなりません。 但し、SendMessageでの項目追加はまだ確認が取れていませんが。