ファイルをバイナリ形式で表示する (C#/VB Winow Form編)
ディレクトリが展開されるときに、展開されるディレクトリ直下のファイルのリストを取得してディレクトリのみをツリービューに追加します。
ツリービューでノードが展開されるときにイベントが発生するので、該当するイベントにイベントハンドラを追加して、ディレクトリの展開処理を行います。
ディレクトリツリーのノードが展開されるとき、または、閉じられるときに呼び出されるイベント処理です。
ディレクトリツリーのノード(ディレクトリ)が展開されるときのイベント処理を行うために、BeforeExpand()メソッドをオーバーライドします。
「FileTree」の「BeforeExpand」プロパティに「FileTree_BeforeExpand」を追加します。
C# ソースコード [FileTreeView.cs]
// -----------------------------------------------------------------------
/// <summary>
/// ディレクトリツリーのディレクトリが展開されるときのイベント処理.
/// </summary>
/// <param name="sender">
/// イベントを発生させたオブジェクト.
/// </param>
/// <param name="e">
/// イベント・パラメータ.
/// </param>
private void FileTree_BeforeExpand( object sender, TreeViewCancelEventArgs e )
{
var node = e.Node;
if( node == null ){
return;
}
//! 展開されるディレクトリのサブディレクトリを一旦クリアする.
node.Nodes.Clear();
//! 展開されるノードに対応したディレクトリの絶対パスを取得する.
var path = GetAbsolutePath( node );
if( path.Length > 0 ){
//! 展開されるディレクトリのサブディレクトリを表示する.
AddDirectory( node, path, false );
}else{
//! 絶対パス名が無い場合はルートの展開なのでドライブ名を表示する.
AddDriveName( node );
}
}
VB ソースコード [FileTreeView.vb]
'' -----------------------------------------------------------------------
''' <summary>
''' ディレクトリツリーのディレクトリが展開されるときのイベント処理.
''' </summary>
''' イベント対象のオブジェクト.
''' </param>
''' <param name="e">
''' イベントパラメータ.
''' </param>
Private Sub FileTree_BeforeExpand( sender As Object, e As TreeViewCancelEventArgs ) Handles FileTree.BeforeExpand
Dim node As TreeNode = e.Node
If node Is Nothing Then
Return
End If
' 展開されるディレクトリのサブディレクトリを一旦クリアする.
node.Nodes.Clear()
' 展開されるノードに対応したディレクトリの絶対パスを取得する.
Dim path As String = GetAbsolutePath( node )
If path.Length > 0 Then
' 展開されるディレクトリのサブディレクトリを表示する.
AddDirectory( node, path, false )
Else
' フルパス名が無い場合はルートの展開なのでドライブ名を表示する.
AddDriveName( node )
End If
End Sub
ディレクトリツリーが展開されるときに以下の処理を行います。
-
展開されるノードにはダミーで1個だけサブディレクトリの子ノードがあるはずなので、一旦削除します。
(そうしないと、同じサブディレクトリのノードが2個できてしまいます。) 展開されるノードに対応したディレクトリの絶対パスを取得します。
-
絶対パスがある場合は、ドライブ名かディレクトリ名のノードなので、展開するノードにディレクトリ名のリストを子ノードとして追加します。
(AddDirectory()を呼び出します。) -
絶対パスがない場合、展開するノードはルートノードなので、展開するノードにドライブ名のリストを子ノードとして追加します。
(AddDriveName()を呼び出します。)