- PR -

TreeViewの特定ノードの展開について

1
投稿者投稿内容
槇田(仮)
会議室デビュー日: 2006/12/08
投稿数: 4
投稿日時: 2007-02-02 14:05
こんにちは。以前カラム抽出の質問でお世話になったものです。
おかげ様で件のシステムはなんとかメドが着きました。ありがとうございます。

さて現在、次のようなGUIを作成しています。
(1)画面左側にルート以下のディレクトリ一覧を表示(ツリービュー)
(2)画面右側にファイル一覧を表示。表示されるファイルは以下の通り
  (2-1)ディレクトリ一覧で選択中のディレクトリに存在する全てのTXT、HTML、XMLファイル


ディレクトリ一覧とファイル一覧の表示についてはこちらを参考にさせていただき実装済みです。
tp://uchukamen.com/Programming1/TreeViewByDk/index.htm

今回質問させて頂きたいのは、画面の初期表示時(Form_Load発生時)に
『ルートから特定のディレクトリまでの一連のノード』を動的に展開させるには
どのような処理を行えばよいのか、です。
(特定のディレクトリ=ユーザが任意に指定する作業フォルダ)

例えば、C:\\Folder2\\Data2\\2007_02_01 を作業フォルダとして設定している場合
画面の初期表示としてツリービューを以下のような状態にしておきたいのです。

■C:\\

|-■Folder1
|-■Folder2
| |
| |-■Data1
| |-■Data2
|   |
|   |-■2007_02_01 ←ここまで展開済み
|-■

どうかお力添えをお願いいたします。

----------------------------------
追記:2007/02/02 14:12
 すみません、開発はVS2005 C#で行っています。

[ メッセージ編集済み 編集者: 槇田(仮) 編集日時 2007-02-02 14:12 ]
未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2007-02-02 15:02
上から順にノードを開けばいいかと。
treeView1.Nodes[1].Expand();
treeView1.Nodes[2].Nodes[1].Expand();
槇田(仮)
会議室デビュー日: 2006/12/08
投稿数: 4
投稿日時: 2007-02-02 21:27
引用:

未記入さんの書き込み (2007-02-02 15:02) より:
上から順にノードを開けばいいかと。
treeView1.Nodes[1].Expand();
treeView1.Nodes[2].Nodes[1].Expand();



素早いお答えをいただきありがとうございます。
早速実装してみようと思ったのですが、どの時点でノードを指定して展開すればよいのかが分かりません・・・。
コードは以下のようにしています。

private void Form1_Load(object sender, System.EventArgs e)
{
string fileName = @"C:\Folder2\Data2\2007_02_01";
// ルートディレクトリの取得
string rootName = Path.GetPathRoot(fileName);
string[] drives = Environment.GetLogicalDrives();//ドライブ取得

// ドライブを取得
foreach (string drive in drives)
{
TreeNode tn = new TreeNode(drive);
treeView1.Nodes.Add(tn);
if(tn.Text == rootName)
{
tn.Expand();
// この段階で順次ExpandしようとしたがNullだった
}
tn.Nodes.Add("dummy");  // +表示用ダミー

}
}

private void treeView1_BeforeExpand(object sender, System.Windows.Forms.TreeViewCancelEventArgs e)
{
TreeNode selectedNode = e.Node; //引数のイベント発生ノードに対し追加・削除・複製
selectedNode.Nodes.Clear(); //ダミーノードをクリアするので必要
DirectoryInfo selectedDir = new DirectoryInfo(selectedNode.FullPath);
if (selectedDir.Exists) //ディレクトリが存在すればノードに追加
{
DirectoryInfo[] subDirInfo = selectedDir.GetDirectories();
foreach(DirectoryInfo di in subDirInfo)
{
try
{
//サブディレクトリをノードに追加
TreeNode nd = selectedNode.Nodes.Add(di.Name);
DirectoryInfo[] subSubInfo = di.GetDirectories();
if(subSubInfo.Length > 0) //下位にディレクトリがあれば
{
nd.Nodes.Add("dummy"); //+を表示するためにダミーノード(フォルダ)追加
}
} catch (Exception exc) {
string s = exc.Message.ToString();
}
}
}
}
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-02-03 00:50
> 早速実装してみようと思ったのですが、どの時点でノードを指定して展開すればよいのかが分かりません・・・。

すべてのノードが追加されてTreeView全体ができてから、じゃないかな。
1

スキルアップ/キャリアアップ(JOB@IT)