はじめに。
TreeViewコントロールチュートリアルのこのセッションでは、メインフォーム frmTreeViewtabのTreeViewコントロールとともに2つのサブフォームを使用します。 。以前のデモプロジェクトからプリロードされた画像を含むImageListコントロールをインポートしました。同じlvCategoryを使用します およびlvProducts 以前のプロジェクトで使用したテーブル。
lvCategory テーブルの主キー フィールド(CID)と説明フィールド(カテゴリ)の値は、TreeView Nodes Add()メソッドの Key およびテキスト それぞれパラメータ値。
それに加えて、 lvProducts テーブルにはParentIDがあります カテゴリコード(CID)値で更新されたフィールド。特定のカテゴリに属するすべての製品アイテムは、ParentIDフィールドの(カテゴリID)CIDフィールド値で更新されます。このようにして、両方のテーブルにマスターと子の関係があります。
製品レコードには、タブコントロールページに2つのサブフォームがあります。最初のページにはデータ表示があります サブフォームと2番目のページには編集があります サブフォーム。最初のタブコントロールページには、TreeViewコントロールの特定のカテゴリに属するすべての製品レコードが表示されます。最初のサブフォームレコードは、2番目のサブフォームで編集するために特定のレコードを表示および選択するために表示されます。
現在 記録またはユーザーが選択 最初のサブフォームのレコードは、タブコントロールの2番目のページにある2番目のサブフォームで編集できます。 灰色で強調表示されているキーフィールドはロックされており、編集できません。
サブフォームデザインビューを備えたTreeView。
フォームのデザインビューfrmTreeViewTab 以下に示します:
メインフォームの最初の2つのバインドされていないテキストボックスは、ユーザーがTreeViewコントロールからCategoryアイテムを選択すると更新されます。
3番目のバインドされていないテキストボックス(名前p_ID)は、最初に最初の製品レコードの一意のID(PID)値で更新されます。それ以外の場合は、ユーザーが選択したレコードの値が更新されます。最初のサブフォームで選択した製品レコードは、2番目のサブフォームで変更できます。
以前のチュートリアルセッションへのリンク。
以前のチュートリアルセッションリンクは、すぐに参照できるように以下に示されています。
- MicrosoftTreeViewControlチュートリアル
- TreeViewコントロールを使用したアクセスメニューの作成
- TreeViewコントロールへの画像の割り当て
- TreeViewControl-2への画像の割り当て
- TreeViewコントロールのチェックマーク-削除ノードの追加
- TreeViewImageComboドロップダウンアクセスメニュー
- ドラッグアンドドロップでTreeViewノードを再配置
- MS-AccessTreeViewを使用したListViewコントロール
- ListViewコントロールのドラッグドロップイベント
CatId バインドされていないテキストボックスは[リンクマスターフィールド] 最初のサブフォームのプロパティ値。
3番目のバインドされていないテキストボックスの製品コード( p_ID )は[リンクマスターフィールド]にリンクされています 表示の2番目のサブフォームのプロパティ値 タブページ。
p_ID バインドされていないテキストボックスの値は、最初のサブフォームの内容が更新されたとき、またはユーザーがアイテムを選択したときに更新されます。
画面の通常の表示。
frmTreeViewTabの通常のビュー フォームは以下のとおりです:
2番目のサブフォームの製品レコードのキーフィールド(前色は灰色)はロックされており、コンテンツを変更することはできません。
フォームfrmTreeViewTab クラスモジュールVBAコード:
Option Compare Database Option Explicit Dim tv As MSComctlLib.TreeView Dim imgList As MSComctlLib.ImageList Const Prfx As String = "X" Private Sub Form_Load() Dim db As DAO.Database Dim tbldef As TableDef 'Initialize TreeView Nodes Set tv = Me.TreeView0.Object tv.Nodes.Clear 'Initialixe ImageList Object Set imgList = Me.ImageList3.Object 'Modify TreeView Font Properties With tv .Font.Size = 9 .Font.Name = "Verdana" .ImageList = imgList 'assign preloaded imagelist control End With LoadTreeView 'Create TreeView Nodes End Sub Private Sub LoadTreeView() Dim Nod As MSComctlLib.Node Dim strCategory As String Dim strCatKey As String Dim strProduct As String Dim strPKey As String Dim strBelongsTo As String Dim strSQL As String Dim db As DAO.Database Dim rst As DAO.Recordset 'Initialize treeview nodes tv.Nodes.Clear strSQL = "SELECT lvCategory.CID, lvCategory.Category, " strSQL = strSQL & "lvcategory.BelongsTo FROM lvCategory ORDER BY lvCategory.CID;" Set db = CurrentDb Set rst = db.OpenRecordset(strSQL, dbOpenSnapshot) ' Populate all Records as Rootlevel Nodes Do While Not rst.BOF And Not rst.EOF If rst.AbsolutePosition = 1 Then Me![CatID] = rst![CID] End If strCatKey = Prfx & CStr(rst!CID) strCategory = rst!Category Set Nod = tv.Nodes.Add(, , strCatKey, strCategory, 1, 2) Nod.Tag = rst!CID rst.MoveNext Loop 'In the second pass of the the same set of records 'Move Child Nodes under their Parent Nodes rst.MoveFirst Do While Not rst.BOF And Not rst.EOF strBelongsTo = Nz(rst!BelongsTo, "") If Len(strBelongsTo) > 0 Then strCatKey = Prfx & CStr(rst!CID) strBelongsTo = Prfx & strBelongsTo strCategory = rst!Category Set tv.Nodes.Item(strCatKey).Parent = tv.Nodes.Item(strBelongsTo) End If rst.MoveNext Loop rst.Close TreeView0_NodeClick tv.Nodes.Item(1) End Sub Private Sub TreeView0_NodeClick(ByVal Node As Object) Dim Cat_ID As String 'Initialize hidden unbound textbox 'Link Master Field' values Cat_ID = Node.Tag Me!CatID = Cat_ID Me![xCategory] = Node.Text End Sub Private Sub cmdExit_Click() DoCmd.Close End Sub
TreeViewControlとImageListControlの使用法とその機能はすべて以前のセッションで詳細に説明されていたため、上記のフォームモジュールに表示される以前のVBAサブルーチンはごくわずかです。
これまでに、MS-Access TreeView、ListView、ImageList、およびImageCombo Controlを使用していくつかの画面を設計してきましたが、これらが独自のプロジェクトインターフェイス設計の優れた参照ポイントとして見つかることを願っています。
TreeViewコントロールのMS-Officeバージョンの問題。
ご使用のバージョンのMicrosoftAccessでデモデータベースを実行する際に問題が発生した場合は、次のリンクを参照して、問題の解決に役立つ可能性のある修正アクションを確認してください。
以前は、上記のコントロールは64ビットシステムでは実行されていませんでした。ただし、2017年9月に、MicrosoftはMSCOMCTL.OCXライブラリの更新を発表しました。参考までに、Microsoftドキュメントの次の抜粋を以下に示します。
2017 Update:1707ドキュメントの全文については、上記のドキュメント画像をクリックしてください。次のリンクは、いくつかの役立つヒントを示しています。- 解決済みのMSCOMCTL.OCXダウンロードレジスタ64ビットウィンドウ
上記のTreeViewコントロールオブジェクトを使用すると、新しいプロジェクトの見栄えが良く、パフォーマンスの高いユーザーインターフェイスを構築できます。
デモデータベースをダウンロードします。