ファイルをバイナリ形式で表示する (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()を呼び出します。)



商標に関する表示