C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: VBでのTree階層


(過去ログ 132 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■78175 / inTopicNo.1)  VBでのTree階層
  
□投稿者/ NKSH (1回)-(2015/12/18(Fri) 17:59:29)

分類:[.NET 全般] 

はじめまして、VB(.NET)について質問させていただきます

今現在、VBでTreeViewを用いてDB上での受注管理をしやすくするようなものを作っています。 

しかし、TreeViewを読み込むところで、
TreeViewが階層構造にならず下に1つしか出ないようになってしまいます

◎
 |--XXX
 |--OOO

現在↑のようになってしまい、実際はこのような感じにしたいと思っております
◎
 |--XXX
 |  |_yyy
 |    |_zzz
 |      |_ddd
 |
 |-OOO

このようにするためには、どのようにプログラムを直したらよろしいでしょうか?


 回答よろしくお願いします


********##コード##**************
Private Sub TreeViewLoad()

        Dim contorol As New Contoroller
        Dim orderlist As ArrayList = contorol.GetOrderList
       
        Me.TreeView.Nodes.Clear()

        Dim rootNode As TreeNode
        rootNode = New TreeNode()
        rootNode.Text = " 受注リスト "
        TreeView.Nodes.Add(rootNode)

        Dim prod As ProductClass
        Dim proc As ProcessClass
        Dim parts As PartsClass
        Dim order As OrderClass

        For Each order In orderlist

            Dim i As Integer = 0
            Dim j As Integer = 0
            Dim q As Integer = 0

            Dim myTreeNodeArray(order.ProductList.Count - 1) As TreeNode


            For Each prod In order.ProductList

                Dim mytreeNodeArrayProcess(prod.ProcessList.Count - 1) As TreeNode 
                myTreeNodeArray(i) = New TreeNode("プロダクト名 :" + prod.ProductName)
          
                For Each proc In prod.ProcessList

                    Dim mytreeNodeArrayParts(proc.PartsList.Count - 1) As TreeNode


                    mytreeNodeArrayProcess(j) = New TreeNode("プロセス名 :" + proc.ProcessName)

                    For Each parts In proc.PartsList

                        mytreeNodeArrayParts(q) = New TreeNode("部品名 :" + parts.PartsName)

                           mytreeNodeArrayParts(q).Tag = parts

                        q += 1
                    Next parts
                    j += 1
                Next proc
                i += 1
            Next prod
            Dim orderNode As New TreeNode("受注先 :" + order.OrderName, myTreeNodeArray)
            orderNode.ForeColor = Color.Red
            Me.TreeView.Nodes(0).Nodes.Add(orderNode)


        Next order
        With Me.TreeView
            .ExpandAll()
            .ForeColor = Color.Navy
            .BackColor = Color.Azure
            .LineColor = Color.Red
            .ContextMenuStrip = Me.ContextMenuStrip1
        End With
    End Sub


引用返信 編集キー/
■78180 / inTopicNo.2)  Re[1]: VBでのTree階層
□投稿者/ 魔界の仮面弁士 (608回)-(2015/12/19(Sat) 09:52:12)
No78175 (NKSH さん) に返信
> Dim contorol As New Contoroller
Contoroller ?
Controller でなくて良いのですか?


> TreeViewが階層構造にならず下に1つしか出ないようになってしまいます

なぜならば、.Nodes(0) というのは、最初に追加した
> TreeView.Nodes.Add(rootNode)
のことだからです。

すなわち、ループ中で行っている
> Me.TreeView.Nodes(0).Nodes.Add(orderNode)
でいうのは、
 rootNode.Nodes.Add(orderNode)
と同じ意味であり、それはつまり、
> ◎
> |--XXX
> |--OOO
を作っていることに他なりません。

上記を端折って書くと、
 ◎.Nodes.Add(XXX)
 ◎.Nodes.Add(OOO)
という処理になっているわけですね。



> ◎
> |--XXX
> |  |_yyy
> |    |_zzz
> |      |_ddd
> |
それを実現するのであれば、
 ◎.Nodes.Add(XXX)
 XXX.Nodes.Add(yyy)
 yyy.Nodes.Add(zzz)
 zzz.Nodes.Add(ddd)
という処理に置き換えてみましょう。
引用返信 編集キー/
■78181 / inTopicNo.3)  Re[1]: VBでのTree階層
□投稿者/ 魔界の仮面弁士 (609回)-(2015/12/19(Sat) 09:59:22)
No78175 (NKSH さん) に返信
> このようにするためには、どのようにプログラムを直したらよろしいでしょうか?

修正案。こちらは受注管理クラスを持ち合わせていないので、
動作未検証のイメージコードですけれども。

Dim rootNode As TreeNode = TreeView.Nodes.Add(" 受注リスト ")
For Each order In orderlist
  For Each prod In order.ProductList
   Dim productNode As TreeNode = rootNode.Nodes.Add("プロダクト名 :" & prod.ProductName)
   For Each proc In prod.ProcessList
    Dim processNode As TreeNode = productNode.Nodes.Add("プロセス名 :" & proc.ProcessName)
    For Each parts In proc.PartsList
     Dim partsNode As TreeNode = processNode.Nodes.Add("部品名 :" & parts.PartsName)
     partsNode.Tag = parts
    Next
   Next
  Next
Next

引用返信 編集キー/
■78182 / inTopicNo.4)  Re[2]: VBでのTree階層
□投稿者/ 魔界の仮面弁士 (610回)-(2015/12/19(Sat) 10:00:10)
No78181 (魔界の仮面弁士) に追記

# あ…。受注先ノードが漏れてた。
引用返信 編集キー/
■78183 / inTopicNo.5)  Re[3]: VBでのTree階層
□投稿者/ 魔界の仮面弁士 (611回)-(2015/12/19(Sat) 23:15:48)
No78182 (魔界の仮面弁士) に追記
>> こちらは受注管理クラスを持ち合わせていないので、
>> 動作未検証のイメージコードですけれども。
> # あ…。受注先ノードが漏れてた。

掲示板が復活したようなので、検証用のダミーデータ付きで再掲。
受注管理クラスは XML で代用しています。


Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        TreeViewLoad(Me.TreeView1)
    End Sub

    Private Sub TreeViewLoad(tv As TreeView)
        tv.Nodes.Clear()

        Dim orderList = GetOrderList().Root.Elements

        Dim rootNode As TreeNode = tv.Nodes.Add(" 受注リスト ")
        For Each order In orderList
            Dim orderNode As TreeNode = rootNode.Nodes.Add("受注先 :" & order.@OrderName)
            For Each prod In order.<ProductList>
                Dim productNode As TreeNode = orderNode.Nodes.Add("プロダクト名 :" & prod.@ProductName)
                For Each proc In prod.<ProcessList>
                    Dim processNode As TreeNode = productNode.Nodes.Add("プロセス名 :" & proc.@ProcessName)
                    For Each parts In proc.<PartsList>
                        Dim partsNode As TreeNode = processNode.Nodes.Add("部品名 :" & parts.@PartsName)
                        partsNode.Tag = parts
                    Next parts
                Next proc
            Next prod
            orderNode.ForeColor = Color.Red
        Next order

        tv.ExpandAll()
        tv.ForeColor = Color.Navy
        tv.BackColor = Color.Azure
        tv.LineColor = Color.Red
        tv.ContextMenuStrip = Me.ContextMenuStrip1
    End Sub


    Private Function GetOrderList() As XDocument
        Return <?xml version="1.0"?>
               <受注リスト>
                   <OrderList OrderName="Developer Tools">
                       <ProductList ProductName="Visual Studio">
                           <ProcessList ProcessName="Boston">
                               <PartsList PartsName="Visual Basic 5.0"/>
                               <PartsList PartsName="Visual C++ 5.0"/>
                               <PartsList PartsName="Visual J++ 1.1"/>
                               <PartsList PartsName="Visual InterDev 1.0"/>
                               <PartsList PartsName="Visual SourceSafe 5.0"/>
                           </ProcessList>
                           <ProcessList ProcessName="Aspen">
                               <PartsList PartsName="Visual Basic 6.0"/>
                               <PartsList PartsName="Visual C++ 6.0"/>
                               <PartsList PartsName="Visual J++ 6.0"/>
                               <PartsList PartsName="Visual InterDev 6.0"/>
                               <PartsList PartsName="Visual Studio Installer 1.1"/>
                               <PartsList PartsName="Visual SourceSafe 6.0"/>
                           </ProcessList>
                       </ProductList>
                   </OrderList>
                   <OrderList OrderName="Operating Systems">
                       <ProductList ProductName="Release">
                           <ProcessList ProcessName="9x">
                               <PartsList PartsName="Chicago"/>
                               <PartsList PartsName="Detroit"/>
                               <PartsList PartsName="Nashville"/>
                               <PartsList PartsName="Memphis"/>
                               <PartsList PartsName="Millennium"/>
                           </ProcessList>
                           <ProcessList ProcessName="NT">
                               <PartsList PartsName="Razzle"/>
                               <PartsList PartsName="Daytona"/>
                               <PartsList PartsName="Cairo"/>
                               <PartsList PartsName="Janus"/>
                               <PartsList PartsName="Whistler"/>
                               <PartsList PartsName="Freestyle"/>
                               <PartsList PartsName="Harmony"/>
                               <PartsList PartsName="Symphony"/>
                               <PartsList PartsName="Emerald"/>
                           </ProcessList>
                       </ProductList>
                       <ProductList ProductName="Dropped">
                           <ProcessList ProcessName="9x">
                               <PartsList PartsName="Nashville"/>
                           </ProcessList>
                           <ProcessList ProcessName="NT">
                               <PartsList PartsName="Neptune"/>
                               <PartsList PartsName="Odyssey"/>
                           </ProcessList>
                       </ProductList>
                   </OrderList>
               </受注リスト>
    End Function

End Class

引用返信 編集キー/
■78202 / inTopicNo.6)  Re[4]: VBでのTree階層
□投稿者/ NKSH (2回)-(2015/12/21(Mon) 22:42:04)
すみません、返信遅れてしまいました。回答ありがとうございました
そこからもう少し質問させていただきたいのですが、よろしいでしょうか?
引用返信 編集キー/
■78208 / inTopicNo.7)  Re[5]: VBでのTree階層
□投稿者/ 魔界の仮面弁士 (615回)-(2015/12/22(Tue) 00:41:51)
No78202 (NKSH さん) に返信
> すみません、返信遅れてしまいました。回答ありがとうございました
> そこからもう少し質問させていただきたいのですが、よろしいでしょうか?

何の質問かわかりませんが、御随意に。
質問するのも回答するのも任意です。(^^;
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -