sql >> データベース >  >> RDS >> Access

TreeViewImageComboドロップダウンアクセスメニュー

    はじめに。

    TreeViewコントロールチュートリアルのこのセッションでは、ImageComboBoxコントロールのプログラミングについて学習します。 ImageCombo Controlを使用して、MS-Accessプロジェクトのドロップダウンメニューを作成します。 ImageListからの画像とそのキー値を表示するための2番目のImagecomboBoxコントロールがあります コントロール。これらのImageComboBoxコントロールの両方について、画像のリストは共通のImageListコントロールから取得されています。このチュートリアルシリーズの以前のセッションで、画像はコンピュータからImageListコントロールに手動でアップロードされました。

    以下は、これまでに取り上げたツリービューコントロールのチュートリアルセッションです。

    TreeViewコントロールチュートリアルセッションリンク。

    1. MicrosoftTreeViewControlチュートリアル
    2. TreeViewコントロールを使用したアクセスメニューの作成
    3. TreeViewコントロールへの画像の割り当て
    4. TreeViewControl-2への画像の割り当て
    5. TreeViewコントロールのチェックマーク-削除ノードの追加

    両方のImageComboBoxのデモビューが拡張されました。

    完成したMS-Accessプロジェクトのドロップダウンメニューの画像を以下に示します。

    以下に示す上記のフォームのデザインビュー画像:

    ドロップダウンImageComboBoxソースデータ。

    新しいMS-Accessプロジェクトドロップダウンメニューのソースデータは、以前のAccessメニュープロジェクトから取得されました。

    4番目のアイテムから、デモデータベースを今すぐダウンロードします(まだダウンロードしていない場合)。 上記のリンク。そうすると、現在のセッションを続行するために必要なすべてのデータオブジェクトができます。

    カテゴリ、製品、メニューの3つのテーブルがあります テーブル。カテゴリと製品データを表示するための2つのフォームと、レポート用のデータフィルタパラメータフォームがあります。

    さらに2つのフォームがあります: frmMenu およびfrmMenu2 以前のチュートリアルセッションで使用しました。

    カテゴリと製品のデータ項目をプレビューするための2つのレポートがあります。

    いくつかの簡単なメッセージを表示するための2つのマクロ。マクロは、複雑なレポートのデータ処理のためのアクションクエリの順序付けに使用できます。これらのアクションは、前のチュートリアルセッションでTreeViewコントロールプロジェクトメニューからオプションを選択することによって実行されました。

    ImageComboBox を使用して新しいドロップダウンメニューを作成するため、ここでもこれらすべてのオブジェクトが必要です。 コントロール。 frmMenu2 で行ったのとまったく同じ方法で、新しいドロップダウンコントロールメニューのオプションを選択して、これらすべてのオブジェクトを開くことができる必要があります。 この同じデータベースで、TreeViewコントロールを使用してフォームを作成します。

    メニュー 参考までに表の画像を以下に示します。

    ドロップダウンメニューフォームのデザインの準備。

    上記のメニューフォームのデザインビューを確認してください。そこには2つのメニュー関連のコントロールがあります。 1つのImageListコントロールと1つのImageComboBoxコントロール。フォームの右側にもう1つのImageComboBoxコントロールが配置され、ImageListのが表示されます。 画像。

    1. ImageListのコピーを作成します frmMenu2からの制御 フォームを作成して新しいフォームに貼り付けます。たとえば、 frmMenu3Combo

      このイメージリストコントロールには、以前のチュートリアルセッションでコンピューターから手動でアップロードしたイメージが含まれています。プロパティシートを開いて、画像とそのキーを確認できます。 名前。 ImageListコントロールを右クリックし、ImageListCtlオブジェクトを強調表示します プロパティオプションを選択します。

    2. フォームの左側に配置されているImageComboBoxコントロールは、 imgCombo1という名前のドロップダウンメニュー用です。 。 Microsoft ImageComboBox Controlを検索します ActiveXコントロールから グループ化してフォームに配置します。コントロールの名前をimgCombo1に変更します 。

    3. imgCombo2 という名前で、右側に別のImageComboBoxコントロールを作成します 。 ImageList0 から、画像とそのキー名を表示するために使用する2番目のImageComboBox ドロップダウンリストとしてのコントロール。

    4. 2番目のImageComboBoxコントロールの上にLabelコントロールを追加し、そのキャプションをImageList。に変更します。

    Image-Combo-Boxコントロールの画像リスト。

    まず、2番目の imgCombo2を使用します ImageListコントロールから画像のリストを制御および表示します。コードに慣れたら、ドロップダウンメニューの作成手順を非常に簡単に理解できます。

    frmMenu3Comboを分割しました モジュールVBAコードを2つの部分に形成します。最初の部分を見て、そこに何があるか見てみましょう。

    簡単に言うと、グローバル宣言領域では、メインオブジェクト変数が宣言されています。 Form_Load() イベントプロシージャは、フォームのImageListコントロールをそのオブジェクト変数 objimgListに初期化します。 cboImageList()を呼び出します ImageListコントロールから2番目のImageComboBoxコントロールに画像を追加するためのサブルーチン。コードを詳しく見てみましょう。

    Form_Load()を使用した最初の部分のvbaコード およびcboImageList() 以下にリストされているサブルーチン:

    Dim imgcombo1 As MSComctlLib.ImageCombo
    Dim imgCombo2 As MSComctlLib.ImageCombo
    Dim objimgList As MSComctlLib.ImageList
    Const KeyPrfx As String = "X"
    
    Private Sub Form_Load()
    
    Set objimgList = Me.ImageList0.Object
    
    cboImageList 'load imagelist-combo
    
    'CreateMenu 'Create Drop-Down Menu
     
    End Sub
    
    Private Sub cboImageList()
    Dim j As Integer
    Dim strText As String
    
    Set imgCombo2 = Me.ImageCombo2.Object
    imgCombo2.ImageList = objimgList
    
    For j = 1 To objimgList.ListImages.Count
        strText = objimgList.ListImages(j).Key
        imgCombo2.ComboItems.Add , , strText,j,,j
    Next
        imgCombo2.ComboItems(1).Selected = True
    End Sub
    

    VBAコードレビュー。

    グローバル宣言領域で、2つのImageComboBoxコントロール imgCombo1を宣言しました。 プロジェクトメニューとimgCombo2 ImageListの画像を表示するため コントロール。 objimgList フォームのImageListコントロールに対して宣言された変数。 Keyprfx Xという文字の変数 定数として宣言されています。

    Form_Load()内 イベントプロシージャobjimgList フォームのImageListコントロールで、次のステートメントを使用して初期化されます: Set objimgList=Me.ImageList0.Object。 これで、ImageListコントロールにプリロードされたすべての画像に、objimgListオブジェクトを介してアクセスできるようになりました。

    次のステートメントは、サブルーチン cboImageList()を呼び出します。 すべての画像をImgCombo1に追加します コントロール。

    CreateMenu() サブルーチン呼び出しは当分の間コメントアウトされています。

    cboImageList()s ubroutine2つの変数が宣言されています。

    次に、ステートメント Set imgCombo2 =Me.ImageCombo2.Object フォーム上の2番目のImagecomboBoxをオブジェクト変数imgCombo2に割り当てます。

    TreeViewコントロールと同様に、 imgCombo2 ImageListがあります プロパティ。ImageListのプロパティにアクセスするために、ImageListコントロールの参照をImageComboBoxコントロールに渡します。次のステートメント: imgCombo2.ImageList =objimgList

    次に、For。 。 。次へ ループは、ImageListコントロール内の画像の数に対して実行されます。

    最初のImageListアイテムのキー- 値('form_close')が strTextに保存されました 変数。ここでは、画像リストコントロールのキー値をテキストまたはImageCombo画像の説明として使用しました。これは、これが使用可能な唯一のテキストであるためです。 タグ プロパティは空であり、ドロップダウンメニューを操作するときにこのプロパティを使用する他の用途があります。

    次のステートメントは、私たちが注意深く見なければならない重要なステートメント、追加です。 ImageComboBoxコントロールのメソッド。ステートメントの構文は次のとおりです。

    imgCombo2.ComboItems.Add [Index],[Key],[Text],[Image],[SelImage],[Indentation]

    Add()のすべてのパラメータ メソッドはオプションです。このコントロールの最初のテスト実行では、[テキスト]、[画像]、の値を使用します および[インデント] のみ。 画像リストビューの最初のテスト実行の結果を表示した後、このImageComboコントロールの[インデント]パラメーター値は使用しません。

    注:ただし、インデントが必要になることに注意してください。 ドロップダウンメニューのプロパティ値。メニュー項目をTreeViewコントロールのルートノードおよび子ノードのように表示します。 [キー]を使用します 特定のメニュー項目のタグにアクセスするためのパラメータ(キーパラメータとテキストパラメータの両方) プロパティ値。

    インデントをインクリメントした画像リスト パラメータ設定。

    インデントに増分値を適用した後、ImageCombo2の最初のテスト実行画像リストは以下の画像のようになります。:

    インデントの効果は、上記の試運転画像から明らかです。各アイテムは右に移動され、前のアイテムより1スペース大きくなっています。この機能を利用して、プロジェクトメニュー項目のノードをルートレベルおよび子ノードのように配置できます。

    strTextの後 value(‘form_close’)最初の変数 j ImageListのインデックス番号、スキップした[SelImage]パラメータ、および jの次の値を参照します ComboBoxリストに配置されたときに、各リスト項目のインデントに使用されています。最初のテスト実行後、結果を表示した後、画像インデックス値の後のすべてのパラメータを削除できます。

    次のステートメント: imgCombo2.ComboItems(1).Selected =True ComboBoxの最初の項目を選択します。コードを使用してImageComboコントロールからアイテムを選択する場合、 Change() イベントは発生しますが、フォームで直接アイテムを選択した場合は発生しません。 Update() イベントは手動更新イベントを無視し、コードを介して呼び出しを試みます。

    フォームfrmMenu3Comboを保存し、通常表示で開きます。 2番目のImageListComboBoxコントロールを展開し、結果を表示します。カンマと変数jを削除します 最後に 最初の変数jの後、ImageListインデックス番号のために保持されます。

    プロジェクトのVBAコードドロップダウンメニュー。

    次に、フォームモジュールのvbaコードの2番目の部分に進み、[アクセス]ドロップダウンメニューを作成する方法と、ComboBoxコントロールアイテムを選択して[フォーム、レポート、マクロ]にアクセスする方法を確認します。

    vbaコードの2番目の部分は、 CreateMenu()で構成されています サブルーチンとImageCombo1_Click()e ベント手順は、以下にリストされています:

    Private Sub CreateMenu()
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim strSQL As String
    Dim strKey As String
    Dim strText As String
    Dim typ As Integer
    
    Set imgcombo1 = Me.ImageCombo1.Object
    imgcombo1.ImageList = objimgList
    
    strSQL = "SELECT ID, Desc, PID, Type,Macro,Form,Report FROM Menu;"
    
    Set db = CurrentDb
    Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)
    
    Do While Not rst.EOF And Not rst.BOF
        If Len(Trim(Nz(rst!PID, ""))) = 0 Then
            strKey = KeyPrfx & CStr(rst!ID)
            strText = rst!Desc
            imgcombo1.ComboItems.Add , strKey, strText, 1, 2, 1 ' image index 1,2([image],[selectedimage])
            'imgcombo1.ComboItems.Add , strKey, strText, "folder_close", "folder_open", 1
        Else
            strKey = KeyPrfx & CStr(rst!ID)
            strText = rst!Desc
            imgcombo1.ComboItems.Add , strKey, strText, 4, 5, 4 'last param is spacing
            'imgcombo1.ComboItems.Add , strKey, strText, "left_arrow", "right_arrow", 4
         
            'Check for the presense of Type Code
            If Nz(rst!Type, 0) > 0 Then
                    typ = rst!Type
                    With imgcombo1.ComboItems
                Select Case typ
                    'save type Code & Form/Report/Macro Name in Tag Property
                    Case 1
                        .Item(strKey).Tag = typ & rst!Form
                    Case 2
                        .Item(strKey).Tag = typ & rst!Report
                    Case 3
                        .Item(strKey).Tag = typ & rst!Macro
                End Select
                    End With
            End If
            
        End If
        rst.MoveNext
    Loop
    rst.Close
    imgcombo1.ComboItems.Item(1).Selected = True
    End Sub
    
    Private Sub ImageCombo1_Click()
    Dim strObject As String
    Dim strTag As String
    Dim typ As Integer
    
    strTag = ImageCombo1.SelectedItem.Tag
    typ = Val(strTag)
    strObject = Mid(strTag, 2)
    
    Select Case typ
        Case 1
            DoCmd.OpenForm strObject, acNormal
        Case 2
            DoCmd.OpenReport strObject, acViewPreview
        Case 3
            DoCmd.RunMacro strObject
    End Select
    
    End Sub
    

    アクセスプロジェクトメニューの作成の前のセッションでそれを行っていない場合は、vbaコードを開始する前に、テーブルイメージ(このページの上から3番目のイメージ)を確認する必要があると思います。

    ID フィールドには一意のID値があり、AutoNumberフィールドです。

    2番目のフィールド説明 オブジェクトタイプのグループ名(フォーム、レポート、およびマクロ)と、フォーム、レポート、およびマクロの実際のオブジェクト名があります。

    PID (親ID)オブジェクトグループ名のフィールド値は空です:フォーム、レポート、 およびマクロ 。これらの空のPID値アイテムは、ImageComboBoxドロップダウンメニューの左側に1文字のスペースインデントで配置され、他のアイテムは4文字スペースで前方に移動されます。これらのアイテムの配置により、TreeViewコントロールのルートレベルノードと子レベルノードのように見えますが、接続するツリーラインが失われます。

    ImageComboBoxで選択したアイテムコントロールの画像を確認してください。画像は左端の位置に配置されています。次の行のグループアイテムは、左側の1つの文字スペースの後に配置され、他のグループアイテムも同じ位置に表示されます。各グループの子メンバーアイテムは、4つの文字スペースの後に配置されています。

    PIDフィールドの値がチェックされ、空の場合はグループ名であると見なされます。それ以外の場合は、ユーザーがクリックしたときに開く必要のあるアクセスオブジェクト名であり、グループの子メンバーとして配置されます。ここでは、PIDフィールドの実際のキー値は重要ではありません。どちらの場合も、ここで必要です。ただし、代わりにこの目的でタイプフィールド値を使用できます。

    次に、タイプ フィールドにはオブジェクトタイプコードが含まれます: 1 –フォーム名 2 –レポート名、 および3–マクロ名 。次の3つのフィールド:フォーム、レポート、およびマクロには、[タイプ]フィールドのそれぞれのコードに基づいた実際のオブジェクト名があります。わかりやすくするために3つの異なるフィールドを使用しましたが、すべて1つの列に配置することもできます。

    タイプコード およびオブジェクト名 ペア(たとえば、 2rptCategories )はImageComboBoxのタグに保存されます プロパティ。

    CreateMenu()サブルーチン。

    次に、CreateMenu()サブルーチンのvbaコードに進みます。

    データベースとその他の変数は最初に宣言されています。

    imgcombo1 オブジェクトv ariableはMe.ImageCombo1で初期化されています。オブジェクト フォームに記載されています。

    次に、 imgCombo1.ImageList プロパティがImageListオブジェクトでロードされましたobjimgListリファレンス これにより、ImageListのインデックス番号とキー値に直接アクセスできるようになります。

    次に、メニュー テーブルレコードセットはSQL文字列で開かれています。

    の場合、PIDフィールドの値がチェックされています 次に、それはオブジェクトグループ名、 ID 値の前に定数Xが付けられ、 strKeyに保存されます 変数。フィールド説明 値はstrTextに保存されています 可変。

    次のステートメントは、ImageComboBoxコントロールのAdd()メソッドを呼び出し、最初の項目がドロップダウンメニューに追加されました。

    imgcombo1.ComboItems.Add , strKey, strText, 1, 2, 1

    最初のパラメータ値のインデックス番号は省略されていますが、自動的に作成されます。 strKey 変数はIDフィールド値1で構成されます プレフィックス定数X X1 キーとして パラメータ。 strText 説明が含まれています フィールド値。次の値1 ImageListの 最初の画像(キー値 folder_close )インデックス値。引用符で囲まれた「folder_close」キー値が必要な場合は、そうすることができます。次の値2 は2番目の画像(「folder_open」)のインデックス値です。または、引用符で「folder_open」を使用し、最後のパラメータを 1で使用することもできます。 インデント用です。

    注: ImageList内の画像のインデックス順を確認するには ImageCombo2で画像リストの順序を制御チェックします 以前に作成したディスプレイ。 [image] 1 form_closeのように、キー値の前にインデックス値の前に1つのスペースを付けて、その番号をキー値にも追加することもできます。 [画像]2form_openなど。 。 。これはあなた自身の練習としてあなたに任せます。

    次に、PIDフィールドの値がゼロ以外の場合、実際のメニューオプションは追加になります ed その他の下 条項 ここでは、前に行ったように、別のImageComboアイテムを追加しました。 [画像]の場合 および[SelImage] ImageListアイテムインデックス値4を取得したパラメータ および5 。インデントパラメータ値は4です 文字スペース。

    ImageComboアイテムのAdd() その他の下のメソッド 条項、アクセスオブジェクト名( frmDataエントリ)を保存する必要があります タイプと一緒に コード1 タグで ( ImageCombo1.ComboItems.Item(strKey).Tag) 財産。ユーザーがドロップダウンコンボボックスメニューからこのアイテムを選択すると、 Click() イベントが発生し、タグ タイプコードが1の場合、プロパティ値が抽出され、タイプコードがチェックされています (フォーム)次に、タグプロパティ( frmDataエントリ)のフォーム名 DoCmd.OpenFormで開いています コマンド。

    このようにしてすべてのメニュー テーブルレコードがImageComboBoxコントロールに追加されました。

    ステートメントimgcombo1.ComboItems.Item(1).Selected =True ImageComboBoxコントロールのデフォルトアイテムとして最初のアイテムを選択します。このコード実行時にChange() イベントは発生しますが、フォームビューでアイテムをクリックして選択した場合は発生しません。

    注意: ドロップダウンメニューの試用版のフォームを開く前に、「CreateMenu」からコメント記号を削除してください。 Form_Load()の呼び出し行 イベント手順。 ImageCombo2ControlのImageListControlからの画像表示の試運転中に、この行を一時的にコメントアウトしました。

    ImageCombo1_Click() ユーザーがImageComboBoxコントロールからアイテムを選択すると、イベントが発生します。選択したアイテムのタグ タイプコードとオブジェクト名のプロパティ値がチェックされ、 Docmd.Objecttype ObjectNameで開きます 。

    デモデータベースProjectMenuV221.accdb(.zip形式) ダウンロードについては以下をご覧ください。

    ProjectMenuV221.zipをダウンロード

    辞書オブジェクト

    1. 辞書オブジェクトの基本
    2. 辞書オブジェクトの基本-2
    3. 辞書オブジェクトのキーとアイテムの並べ替え
    4. 辞書からレコードを表示する
    5. クラスオブジェクトをディクショナリアイテムとして追加
    6. クラスオブジェクトディクショナリアイテムの更新


    1. CXPACKET待機の詳細:歪んだ並列処理

    2. OracleではsubstrまたはLIKEの方が高速ですか?

    3. フィールド名の周りにバッククォートを使用する

    4. MySQLの既存のテーブルに自動インクリメント列を追加する方法