はじめに。
MS-Accessには、リストボックスがあります。 制御し、ほとんどの場合、アイテムをすばやく見つけるために、データの列は数列しかありません。このコントロールのソースデータは、値リストとしてRow-Sourceプロパティに直接入力されるか、ソーステーブルまたはクエリからロードされます。コンボボックスコントロールはデータを非表示に保ち、クリックして選択するリストを表示する必要があります。これらのオブジェクトは、アクセス制御としてすでに組み込まれています。
しかし、私たちがデータベースで常に使用している別のリストコントロールがあります。それが何であるかを推測できますか?はい、データシートビューコントロールです。レコードは、テーブル、クエリから表示されます。これらすべての場合において、データセットビューのデータは大きなリストとして表示されます。
ただし、Microsoft Accessには、ActiveXコントロールという他のコントロールグループもあります。これらのコントロールの1つであるCommonDialogControlまたはFileBrowserコントロールについてはすでによく知っています。
ここでのトピックは、WindowsListViewControlです。これは、Windowsエクスプローラーに似たオブジェクトとして視覚化できます。ここでは、画像アイコン、小さな画像アイコンのあるアイテムをリストとして、またはエクスプローラーの詳細ビューペインのように表示できます。テーブル/クエリデータをこのコントロールにロードして、データセットビューに表示したり、列または行を再配置したり、行を並べ替えたり、アイテムの横に画像を表示したりできます。 VB6、VB.NET、C#などの他のプログラミング言語は、WindowsListViewControlを使用します。 MicrosoftAccessデータベースでどのように使用できるかを見ていきます。
いくつかの簡単なサンプルデータを含む簡単なListViewデモ画面を以下に示します。
上記の画像のような表示を、ListViewコントロールチュートリアルの開始点にします。 10行のデータをListViewコントロールにアップロードし、VBAコードを数行追加しました。 AccessのActiveXコントロールの既存のリストにはない可能性のあるListViewActiveXコントロール。このコントロールのライブラリファイルMSCOMCTL.OCXを追加する必要があります C:\ Windows\System32フォルダからAccessReferenceに移動します としょうかん。追加すると、 Microsoft ListView Control、Version 6.0という名前のこのコントロールを見つけることができます。 他のActiveXコントロールの中でも。
それでは、 MSCOMCTL.OCXを追加しましょう 私たちのデータベースへのライブラリファイル。これは、ListView、TreeView、ImageListなどのActiveXコントロールのソースライブラリです。以前のTreeViewをすでに実行している場合 コントロールチュートリアルページ、そしてあなたはすでにこのコントロールに紹介されています。
Windows共通コントロールライブラリファイル。
MSCOMCTL.OCXファイルを添付するには、次の手順を実行します。
-
データベースを開き、VBA編集ウィンドウ(Alt + F11)を開きます。
-
参照…を選択します Toolsメニューから 。
-
[参照]ボタンをクリックして、MSCOMCTL.OCXファイル(Microsoft Windows Common Controls)を見つけます。
-
C:\ Windows \ System32 \で上記のファイルを探します フォルダ(32ビットシステムを使用している場合、またはWindows11オペレーティングシステムを使用している場合)。
-
そこに見つからない場合は、フォルダC:\ Windows \ sysWOW64 \(64ビットシステム)、を探します。 そこにこのファイルがあります。
-
ファイルMSCOMCTL.OCXを選択し、開くをクリックします。 ファイルをデータベースに添付するためのコマンドボタン。
-
Alt + F11をもう一度押すと、データベースウィンドウに戻ります。
このページの上部にある上記の画像と一致するサンプルフォームをデザインしましょう。
-
新しい空白のフォームを作成します。
-
オプションのコントロールグループからActiveXコントロールボタンを選択します。
-
Microsoft ListView Controlを見つけて選択します 表示されたリストから[OK]ボタンをクリックして、フォームの詳細セクションにListViewコントロールを挿入します。
-
コントロールのサイズ変更ハンドルをクリックして押したまま、右下隅を右下にドラッグして、上記のサンプル画像のように十分な大きさにします。
-
ListViewコントロール自体を右下にドラッグして左に余裕を持たせ、上に見出しラベルを作成するのに十分なスペースを残します。
-
選択した状態でない場合は、ListViewコントロールをクリックして選択します。
-
プロパティシートを表示し、ListViewコントロールの名前を ListView1に変更します 。
-
上にラベルコントロールを作成し、キャプションを変更します ListView Control Tutorialへのプロパティ値 。ラベルのキャプションをフォントサイズや色などで好きなようにフォーマットできます。
-
LlistViewコントロールの下にコマンドボタンを作成し、そのNameプロパティ値を cmdCloseに変更します。 とそのキャプション 閉じるプロパティ値。 完成したデザイン デザインが完了すると、次のようになります。
-
次に、 ListViewTutorialという名前でフォームを保存します。 フォームをデザインビューに保持します。
-
Alt + F11を押して、フォームのクラスモジュールウィンドウに戻ります。
VBAコード。
-
次のコードをコピーしてフォームのVBAモジュールに貼り付け、既存のコード行がある場合はそれを置き換えます。
Option Compare Database Option Explicit Dim lvwList As MSComctlLib.ListView Dim lvwItem As MSComctlLib.ListItem Dim ObjImgList As MSComctlLib.ImageList Const prfx As String = "X" Private Sub cmdClose_Click() DoCmd.Close acForm, Me.Name End Sub Private Sub Form_Load() Call LoadListView End Sub Private Function LoadListView() Dim intCounter As Integer Dim strKey As String 'Assign ListView Control on Form to lvwList Object Set lvwList = Me.ListView1.Object 'Create Column Headers for ListView With lvwList .ColumnHeaders.Clear 'initialize header area 'Parameter List: 'Syntax: .ColumnHeaders.Add Index, Key, Text, Width, Alignment, Icon .ColumnHeaders.Add , , "Name", 2500 .ColumnHeaders.Add , , "Age", 1200 .ColumnHeaders.Add , , "Height", 1200 .ColumnHeaders.Add , , "weight", 1200 .ColumnHeaders.Add , , "Class", 1200 End With 'Initialize ListView Control While lvwList.ListItems.Count > 0 lvwList.ListItems.Remove (1) Wend With lvwList For intCounter = 1 To 10 strKey = prfx & CStr(intCounter) ' 'Syntax: .ListItems.Add(Index, Key, Text, Icon, SmallIcon) Set lvwItem = .ListItems.Add(, strKey, "Student " & intCounter) 'Add next columns of data as sub-items of ListItem With lvwItem 'Parameters = .Add Index,Key,Text,Report Icon,TooltipText .ListSubItems.Add , strKey & CStr(intCounter), CStr(5 + intCounter) .ListSubItems.Add , strKey & CStr(intCounter + 1), CStr(135 + intCounter) .ListSubItems.Add , strKey & CStr(intCounter + 2), CStr(40 + intCounter) .ListSubItems.Add , strKey & CStr(intCounter + 3), ("Class:" & intCounter) End With Next 'reset lvwItem object Set lvwItem = Nothing End With lvwList.Refresh End Function
-
ListViewControlTutorial-01という名前でフォームを保存します。
フォームのデモビュー。
-
通常のビューでフォームを開いて、作成内容を確認してください。
次の画像のような表示のフォームが見つかった場合は、正しい方向に進んでいます。
Listviewコントロールのプロパティ設定にいくつかの変更を加える必要があります。 ListViewコントロールの名前をListView1に変更しました アクセスのプロパティシートにあります。ただし、ListViewコントロールには独自のプロパティシートがあります。 ListViewコントロールの独自のプロパティシートを使用して、コントロールに変更を加えます。一部のプロパティ値は、アクセスプロパティシートにも表示されます。
-
ListViewコントロールを右クリックして、ListViewCtrlオブジェクトを強調表示します。 表示されたオプションリストからオプションを選択し、プロパティを選択します 表示されたショートカットメニューから。
-
プロパティシートの画像を以下に示します:
上部のプロパティシートには、他のオプションのグループを含むタブがあります。デフォルトでは[全般]タブが表示されます。 [全般]タブでは、コントロールの左側にオプションがあり、右側にチェックボックスがあります。 2つのプロパティのみに変更を加えます。フォームのListViewコントロールはデフォルトで無効な状態になっているため、有効にする必要があります。
ListViewコントロールの表示は、上の最初の画像に表示されるように、大きな画像アイコン、小さな画像アイコン、ListView、またはレポートビューのリストアイテムなど、さまざまなモードに変更できます。
-
有効にチェックマークを付けて、ListViewコントロールを有効にします。 プロパティ、右側。
-
lvwReportを選択します 表示のオプション 左側のドロップダウンリスト。
-
適用をクリックします コントロールのボタンをクリックして変更を保存します。
-
[OK]ボタンをクリックして、プロパティシートを閉じます。
-
変更を加えたフォームを保存してから、通常のビューで開きます。
-
フォームの背景色とその他のフォームのプロパティを除いて、このページの上部に表示されている画像と同じ結果が表示されます。
プログラムの機能図。
VBAコードに進む前に、データ項目がどのようにListViewコントロールにロードされるかを知ることは興味深いでしょう。 ListBoxコントロールのデータ配置は簡単です。ただし、ListViewコントロールのデータ読み込み手順はまったく異なります。私たちが通常認識するのは論理的な順序ではありません。ソースから単一の行へのデータの流れを図の形で理解した後、またはフローチャートと呼んでも、VBAコードとその機能を理解するのは難しくありません。
データフロー図。
-
左上隅のボックスはListViewコントロールを表します。
-
リストを準備する最初のステップは、リストの見出しラベルまたは列見出しを作成することです。これは、図の赤い色の列見出しで確認できます。これは、テーブルのデータセットビューのフィールド見出しと比較できます。各列見出しは、ColumnHeadersオブジェクトメンバーのListViewコントロールにロードされます。 ListViewコントロールのColumnHeaders.Add() メソッドは、各列ラベルを次々にListViewコントロールに割り当てるために5回呼び出されます。
-
次の5つのステップを実行するために必要なアクションに注意することが重要です。これらは、5つのデータフィールドを持つ単一のレコードを表します。ただし、これらは2つの異なるステップセットでListViewコントロールに読み込まれます。または、2つの異なるObjectメンバー( ListItems )に読み込まれているとしましょう。 およびListSubItems )ListViewコントロールの。
-
最初のフィールド(列値)は、ListViewコントロールの ListItemsに読み込まれます。 オブジェクトの追加 方法。上の画像を見ると、最初のレコードの最初の列の値 Student1 ListItemsに読み込まれます オブジェクト( ListView 。ListItems.Add ListViewコントロールのメソッド)。
-
2番目の列以降、他のすべての列の値が ListSubItemsに読み込まれます。 ListItemsのオブジェクト オブジェクト、次々に。 ListSubItems.Add 方法( ListView.ListItems .Item(x)。 ListSubItems.Add )は4回呼び出され、値を年齢、身長、体重に挿入します。 およびクラス 個別に列。
-
-
これらの2レベルのアクションのステップは、値の完全な行をListViewコントロールにロードするために必要です。 ダイアグラムは、ListViewコントロールの2行のデータで描画されます。
上記の図を念頭に置いて、上記のVBAコードがプログラムで何をするかを理解するのに問題はないと確信しています。
セグメントごとにVBAコードに移動しましょう。
モジュールのグローバル宣言領域で、ListViewオブジェクト、ListItemオブジェクト、ImageListオブジェクト、および文字列値LVを使用した定数変数を宣言しました。
Dim lvwList As MSComctlLib.ListView Dim lvwItem As MSComctlLib.ListItem Dim ObjImgList As MSComctlLib.ImageList Const prfx As String = "X"
lvwList 変数はListViewオブジェクトlvwItemとして宣言されています ListItemとして宣言されています ListViewコントロールのオブジェクト、 ObjImgList ImageListとして宣言されています 物体。 ImageListオブジェクトは、TreeView、ListViewコントロールで使用するための画像アイコンをロードできるもう1つのActiveXコントロールです。とりあえずImageListコントロールは脇に置いておき、後で取り上げます。定数Prfx ListItems.Addで使用されます メソッドのキー値 プレフィックス、 の1つ オプションのパラメータ。 キー値は文字列タイプである必要があります。
LoadListView() 関数がメインプログラムです。
フォーム上のListViewコントロールの名前はListView1です。 。プログラムの最初のステートメント:
Set lvwList = Me.ListView1.Object
ListView1を割り当てます フォームをオブジェクト変数lvwListに制御します グローバル宣言領域で宣言されています。
次に、列ヘッダー情報をロードする準備をします。まず、ColumnHeaderオブジェクトを初期化して、オブジェクトが空であることを確認します。プログラムを繰り返し実行すると、コントロールは以前にロードされた値をコントロールに保持する傾向があります。 ColumnHeaders.Clear を無効にした後、このフォームを複数回開いたり閉じたりする場合 ステートメント、あなたは違いを知っているでしょう。同じ見出しのセットが毎回コントロールに追加され、下に空の行が表示されてコントロールに表示されます。
これは、手動で確認および確認できます。次の手順を実行します:
-
デモフォームを一度開いてから、フォームを閉じます。
-
デザインビューでフォームを開きます。
-
ListViewコントロールを右クリックし、ListViewCtrlオブジェクトを強調表示します。 オプションを選択し、プロパティを選択します 表示されたリストから。
-
ラベルが列ヘッダーのタブを選択します。
-
そこに最初の列見出し名前があります テキストコントロール内およびテキストコントロールの上にあるインデックス値1。
-
マウスポインタを[インデックス番号]ボックスの右側に向けると、コントロールが表示され、矢印が左右の方向を指します。
-
右矢印をクリックして、インデックス番号を変更して、テキストコントロールに他の列ラベルを1つずつ表示します。
-
フォームをもう一度開いたり閉じたりすると、上記のタブに同じ列見出しラベルが2セット表示されます。
lvwList.ColumnHeaders.Add(Index, Key, Text, Width, Alignment, Icon)
すべてのパラメータはオプションです。
With lvwList .ColumnHeaders.Clear 'initialize header area 'Parameter List: 'Syntax: .ColumnHeaders.Add Index, Key, Text, Width, Alignment, Icon .ColumnHeaders.Add , , "Name", 2500 .ColumnHeaders.Add , , "Age", 1200 .ColumnHeaders.Add , , "Height", 1200 .ColumnHeaders.Add , , "weight", 1200 .ColumnHeaders.Add , , "Class", 1200 End With
インデックス値は、実行中のシリアル番号として1、2、3として自動的に割り当てられます。
キー 値は文字列データ型ですが、列ヘッダーには使用されません。必要に応じて使用できます。
テキスト 値は、列ラベルとしてコントロールに表示されます。
列見出しの下に表示するために必要なデータ幅のサイズに基づいて、おおよその幅の値をピクセルで割り当てることができます。
テキストの配置値を省略した場合、左揃え( 0-lvwAlignmentLeft )値がデフォルトとして使用されます。右揃えにすることができます( 1-lvwAlignmentRight )または中央揃え( 2-lvwAlignmentCenter 。
列見出しラベルをロードした後、次のステップは、最初のレコードの最初の行の最初の列値をロードすることです。その前に、 ListItemsを初期化する必要があります 次のコードセグメントを持つオブジェクト:
'Initialize ListView Control While lvwList.ListItems.Count > 0 lvwList.ListItems.Remove (1) Wend
次のCodeブロックは、レコードリストアイテムを一度に1行ずつロードし、デモの目的でほとんど変更を加えずに、いくつかの定数値の合計10行をロードします。このプロセスは、 For ... Next内に配置しました ループ 10回実行され、10行のデータが作成されます。
With lvwList For intCounter = 1 To 10 strKey = prfx & CStr(intCounter) ' 'Syntax: .ListItems.Add(Index, Key, Text, Icon, SmallIcon) Set lvwItem = .ListItems.Add(, strKey, "Student " & intCounter) 'Add next columns of data as sub-items of ListItem With lvwItem ' Syntax: .ListSubItems.Add Index,Key,Text,Report Icon,TooltipText .ListSubItems.Add , strKey & CStr(intCounter), CStr(5 + intCounter) .ListSubItems.Add , strKey & CStr(intCounter + 1), CStr(135 + intCounter) .ListSubItems.Add , strKey & CStr(intCounter + 2), CStr(40 + intCounter) .ListSubItems.Add , strKey & CStr(intCounter + 3), ("Class:" & intCounter) End With Next 'reset lvwItem object Set lvwItem = Nothing End With
For...Nextループ内の最初のステートメントstrKey=prfx&Cstr(intcounter) 最初のListItem(最初の列)の一意のキー値を準備します。
ListItems.Addのすべてのパラメータ メソッドはオプションであり、最初の3つのパラメーターであるインデックス、キー、テキストは列ヘッダーと同じ順序で割り当てられ、他の2つのパラメーターはアイコンと小さなアイコンの画像参照です。
最初の列の行の値がListItem(lvwList.ListItems)に割り当てられると、このオブジェクト参照は lvwItemに保存されます。 長いオブジェクト参照の記述を回避するために、次のレベルのサブオブジェクト(ListSubItemsオブジェクト)を簡単に呼び出すためのオブジェクト:
lvwList.ListItems.Item(index).ListSubItems.Add()
lvwItem.ListSubItems.Add()を使用して短い形式で表現されます
ListSubItems.Add()メソッドの最初の3つのパラメーターと受け渡し順序は、 Iconが続くListItemと同じです。 画像参照とそれに続くツールチップ テキストパラメータ。
各列のキー値に、For ... Next Loopの制御変数の現在の実行値+いくつかの値を追加して、すべての列で一意になるようにしました。 Keyパラメータ値は省略できますが、慣れるのは良い考えです。
ListSubItems.Add()メソッドが4回呼び出され、2番目以降の列がListViewコントロールに追加されます。
これらの手順をさらに9回繰り返して、10個のサンプルレコードすべてをListViewコントロールにロードします。
上記のListViewControlDemoデータベースは、すぐに実行および学習できるように接続されています。
チュートリアルの次のセッションでは、リストビューコントロールから値を検索して見つける方法と、データセットビューで行うように列を再配置する方法を学習します。
- MicrosoftTreeViewControlチュートリアル
- TreeViewコントロールを使用したアクセスメニューの作成
- TreeViewノードへの画像の割り当て
- TreeViewノードへの画像の割り当て-2
- TreeViewコントロールチェックマーク追加削除
- TreeViewImageComboドロップダウンアクセス
- ドラッグアンドドロップでTreeViewノードを再配置
- MS-AccessTreeViewを使用したListViewコントロール
- ListViewコントロールのドラッグドロップイベント
- サブフォームを使用したTreeViewコントロール