リストボックスをコンボボックス化するには (Access 2000)



テキストボックスとリストボックスを連動させて擬似的なコンボボックスを作成する方法を解説します。リストボックスをコンボボックス化することにより、常にドロップダウンリストを表示した状態のコンボボックスを作成することができます。

  1. Access 2000を起動して Northwind.mdb を開きます。

  2. データベースウインドウが表示されたら、モジュールのタブをクリックして新規作成ボタンをクリックします。

  3. メニューのツールから参照設定をクリックして、データベースライブラリー(MyLib.mda)を登録します。

  4. データベースウインドウからフォームのタブをクリックして、新規作成ボタンをクリックします。

  5. フォームが表示されたら、テキストボックスと得意先テーブルのリストボックスを作成します。

    図1-フォーム上にテキストボックスと得意先のリストボックスを作成

    テキストボックスとリストボックスのプロパティは以下のように設定します。

    オブジェクト プロパティ 設定値
    テキストボックス 名前 txtCustomer
    リストボックス 名前 lstCustomer
    値集合タイプ テーブル/クエリ
    値集合ソース SELECT 得意先.得意先コード, 
    得意先.フリガナ, 得意先.得意先名
    FROM 得意先
    ORDER BY 得意先.フリガナ;
    連結式 2
    列数 3
    列幅 0cm;2.302cm;2.646cm


    メニューからコードのアイコンをクリックしてフォームモジュールを表示させてリスト1の各種イベント処理をコピー&ペーストします。OpenMyListBox_FS()関数は、クラスモジュール clsMyListBox のインスタンスを作成します。CloseMyListBox_FSは、インスタンスを消去します。

    リスト1-フォームの各種イベント処理コード
    Option Compare Database
    
    Private mobjMyListBox As Object
    
    ' *********************  
    Private Sub Form_Load()
      Set mobjMyListBox = OpenMyListbox_FS()
      With mobjMyListBox
        .DisplayField = "フリガナ" 
        Set .ListBox = lstCustomer
        Set .TextBox = txtCustomer
      End With
    End Sub
    
    ' ****************************************
    Private Sub Form_Unload(Cancel As Integer)
      CloseMyListBox_FS mobjMyListBox
    End Sub

    テキストボックスとリストボックスを連動させてコンボボックス化するには、テキストボックスの更新時フォーカス喪失時のイベントとリストボックスの更新後処理のイベントを利用して実現しています。これらの処理は、クラスモジュール clsMyListBox にて行っています。

    例えば、クラスモジュール内でフォームのテキストボックスの更新時(OnChange)のイベントを処理するには、リスト2に示すようにWithEventsを利用してイベントを登録します。

    WithEventsを利用すると、複数のフォームのイベント処理をクラスモジュールで一括して処理することができます。従来のようにフォーム毎に記述していた処理を共有することができますので、メンテナンスが容易になります。

    リスト2-クラスモジュールでフォームのイベントを処理するには
    Private WithEvents mtxt As Access.TextBox
    
    '************************************************
    Public Property Set TextBox(txt As Access.TextBox)
        Set mtxt = txt
        mtxt.OnChange = "[Event Procedure]"
    End Property
    
    '**************************
    Private Sub mtxt_Change()
    ' OnChangeイベントの処理を記述する    
    End Sub               

     

  6. フォームをfrmMyListBoxの名称で保存します。

  7. フォームビューに切り替えたら、テキストボックスにを入力します。カで始まる最初の得意先(海鮮料理くじら)にカーソルが移動します。続けて、テキストボックスにを入力すると、得意先(からんころん)にカーソルが移動します。このように擬似コンボボックスを作成すると、リストボックスから得意先を検索するとき、検索文字を結合させて検索(Incremental Search)することができます。

    インクレメンタルサーチの詳細については、
    コンボボックスとリストボックスの違いについてを参照してください。

    図2-テキストボックスとリストボックスを連動させて擬似コンボボックスを作成した例


  8. 最後に、フォームを閉じてAccess 2000を終了します。