マイナーでもいいよね??

殆どVB系、でも .NET じゃない VB は知らないよん

目次

Blog 利用状況

書庫

日記カテゴリ

組織単位リスト画面のWindowsアプリのコード(VB)

組織単位リスト画面の Windows アプリの VB のコードです。

 

Private ReadOnly ouCol As List(Of OrganizationalUnit)   'OUのコレクション

 

Public Sub New()

  InitializeComponent()

  Dim ous = DirectoryAccess.GetOrganizationalUnits()  'OUを取得

  ouCol = ous.OrderBy(Function(ou) ou.DisplayPath).ThenBy(Function(ou) ou.Name).ToList()

  Me.OUBindingSource.DataSource = ouCol

  Me.CountLabel.Text = String.Format("{0} 個のオブジェクト", Me.OUBindingSource.Count)

  Me.AddChildNode(Nothing'子ノードを追加

  Me.OUTreeView.ExpandAll()

End Sub

 

Private Sub OUTreeView_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles OUTreeView.AfterSelect

  Dim selectedOU = ouCol.Single(Function(ou) ou.Entry.Path.Equals(e.Node.Tag.ToString()))

  Me.OUBindingSource.Position = Me.OUBindingSource.IndexOf(selectedOU)

  Me.ShowStoredData(selectedOU)   '格納されているデータを表示

End Sub

 

'子ノードを追加

Private Sub AddChildNode(node As TreeNode)

  Dim path = If(node Is Nothing, String.Empty, node.FullPath)

  Dim childOUs = ouCol.Where(Function(ou) ou.DisplayPath.Equals(path)).ToList()   '直下のOU

  For Each ou In childOUs

    Dim childNode = CreateNode(ou)  'ノードを作成

    If node Is Nothing Then

      Me.OUTreeView.Nodes.Add(childNode)

    Else

      node.Nodes.Add(childNode)

    End If

    Me.AddChildNode(childNode)  '子ノードを追加

  Next

End Sub

 

'指定した OU のノードを作成

Private Function CreateNode(ou As OrganizationalUnit) As TreeNode

  Dim path = If(ou.DisplayPath.Length = 0, String.Empty, ou.DisplayPath & "/")

  Return New TreeNode(ou.Name) With {.Name = path & ou.Name, .Tag = ou.Entry.Path}

End Function

 

'指定した OU に格納されているデータを表示

Private Sub ShowStoredData(ou As OrganizationalUnit)

  Dim subItem(2) As String    '名前と種類と説明の配列

  Me.DataListView.Items.Clear()

  For Each domainObject In ou.StoredDomainObjects   '直下のオブジェクト数分

    Dim objectType = DirectCast([Enum].Parse(GetType(CategoryType), domainObject.Entry.SchemaClassName, True), CategoryType)

    subItem(0) = domainObject.Name  '名前をセット

    subItem(1) = DirectoryAccess.CategoryNames.Item(objectType)   '種類をセット

    subItem(2) = domainObject.Description   '説明をセット

    Me.DataListView.Items.Add(New ListViewItem(subItem, objectType))

  Next

  Me.DataCountLabel.Text = String.Format("{0} 個のオブジェクト", ou.StoredDomainObjects.Count)

End Sub

 

指定した OU のノードを作成する CreateNode メソッドでは、作成した TreeNode の Tag プロパティに OU の DirectoryEntry のパスをセットしてます。

これは TreeView.AfterSelect イベントで、選択された OU をリスト(ouCol)から抽出するための条件として使うからです。

選択された OU に格納されているデータを表示する ShowStoredDataメソッドでは、選択された OU の StoredDomainObjects プロパティから 直下のオブジェクトを列挙して、そのオブジェクトの名前、種類、説明を表示する ListViewItem を作って ListView に追加してます。objectType はオブジェクトの種類で、種類及び ImageList のインデックス位置になります。

種類をセットするために使ってる DirectoryAccess.CategoryNames プロパティはこのために DirectoryAccess クラス追加しました。単純にオブジェクトの日本語の名前をリストで返すだけです。

 

'ディレクトリ オブジェクトの種類の名前リストを取得

Public Shared ReadOnly Property CategoryNames As ReadOnlyCollection(Of String)

  Get

    If _categoryNames Is Nothing Then

      _categoryNames = New ReadOnlyCollection(Of String)({"ユーザ", "グループ", "コンピュータ", "組織単位", "プリンタ", "共有フォルダ"})

    End If

    Return _categoryNames

  End Get

End Property

投稿日時 : 2014年3月30日 1:09

コメントを追加

No comments posted yet.
タイトル
名前
URL
コメント