スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

F#入門 Windowsアプリケーション編 Tree View(2)

今回はTree Viewの紹介の続きで、下のようなアプリを作って、プロパティを調べてみます。
 
左側にTree Viewが表示されており、ここでノードを選択すると、右にそのノードのプロパティが表示されるというものです。 
 
823-1.jpg 

823-2.jpg 
823-3.jpg 
823-4.jpg 
823-5.jpg 
823-6.jpg 
 
実行例から分かるようにそれぞれのプロパティは次のことを表します。
 
○FullPath    一番の親ルートからのパス
 
○Level        階層の深さ (一番の親がLevel 0)
 
○Index        兄弟ノード内でのインデックス(0から始まる)
 
○PrevNode    兄弟ノードですぐ前にあるノード
 
○NextNode    兄弟ノードですぐ後にあるノード
 
○FirstNode    子ノード内で最初のもの
 
○LastNode    子ノード内で最後のもの
 
○Parent    親ノード
 
ではソースを載せておきます。
 
open System
open System.Windows.Forms
open System.Drawing
 
let mainForm = new Form(ClientSize = new Size(700,300), Text = "MyTreeView Window")
mainForm.Show() |> ignore
 
//TreeViewの生成と配置
let myTreeView = new TreeView(Width = 280,Height = 280,Location = new Point(10,10))
mainForm.Controls.Add (myTreeView)
 
//ラベルの配置
["FullPath";"Level";"Index";"PrevNode";"NextNode";"FirstNode";"LastNode";"Parent"]
 |> List.map (fun x -> new Label(Text = x,AutoSize = true))
 |> List.mapi (fun i lb -> lb.Location <- new Point(300,15+30*i);lb)
 |> List.iter (fun lb -> mainForm.Controls.Add (lb) |> ignore)
//テキストボックスの生成
let tbs = 
   [for i in [1 .. 8] -> new TextBox(Width = 290,Height = 19)]
    |> List.mapi (fun i tb -> tb.Location <- new Point(400,15+30*i);tb)
//テキストボックスの束縛、配置(warningがでるけど無視)
let fPTB :: lTB :: iTB :: pNTB :: nNTB :: fNTB :: lNTB ::pTB :: _ = tbs
//テキストボックスの配置
tbs 
 |> List.iter (fun lb -> mainForm.Controls.Add (lb) |> ignore) 
 
//ノードに対してプロパティの一覧を表示する
let dispInfo (nd : TreeNode) =
    tbs 
      |> List.iter (fun tb -> tb.Text <- "") //クリアする
 
    fPTB.Text <- nd.FullPath
    lTB.Text  <- nd.Level.ToString()
    iTB.Text  <- nd.Index.ToString()
    if nd.PrevNode <> null then
        pNTB.Text <- nd.PrevNode.ToString()
    if nd.NextNode <> null then
        nNTB.Text <- nd.NextNode.ToString()
    if nd.FirstNode <> null then
        fNTB.Text <- nd.FirstNode.ToString()
    if nd.LastNode <> null then
        lNTB.Text <- nd.LastNode.ToString()
    if nd.Parent <> null then
        pTB.Text <- nd.Parent.ToString()
        
 
myTreeView.AfterSelect.Add(fun e ->  dispInfo (e.Node)) 
 
let rootNode = new TreeNode(Text = "Root Node")
myTreeView.Nodes.Add (rootNode) |> ignore
 
let rootChildNode1 = new TreeNode(Text = "Root child1")
let rootChildNode2 = new TreeNode(Text = "Root child2")
let rootChildNode3 = new TreeNode(Text = "Root child3")
 
rootNode.Nodes.Add ( rootChildNode1) |> ignore
rootNode.Nodes.Add ( rootChildNode2) |> ignore
rootNode.Nodes.Add ( rootChildNode3) |> ignore
 
let rootChild2ChildNode1 = new TreeNode(Text = "Root child2 child1")
let rootChild2ChildNode2 = new TreeNode(Text = "Root child2 child2")
 
rootChildNode2.Nodes.Add( rootChild2ChildNode1) |> ignore
rootChildNode2.Nodes.Add( rootChild2ChildNode2) |> ignore
 
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

Author:T GYOUTEN
F#と英単語とフリーソフトと読書に興味があります。
ホームページでフリーソフトも公開しています。どぞ御贔屓に。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
フリーエリア
blogram投票ボタン
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。