- PR -

TreeViewコントロールの初期化

1
投稿者投稿内容
みや
会議室デビュー日: 2004/07/09
投稿数: 13
お住まい・勤務地: 東京都
投稿日時: 2004-11-09 16:06
いつもお世話になっております。
VB.NET(2003)で、Windows Formを作成中です。
コマンドボタンをクリックすると、
あるディレクトリ(D:\hoge)内に存在するファイルの一覧を、
TreeViewコントロールに表示するという内容なのですが、
一度コマンドボタンをクリックして内容表示させた後、
連続してボタンクリックした際、前回表示された内容にプラスして
ディレクトリ内の一覧が付加して表示されてしまいます。
やりたい事は、ボタンクリックの度に、一旦表示しているTreeView
コントロールの内容をクリアして再度ディレクトリ内の情報を
表示したいのですが、色々ヘルプ等調べながら試してみましたが、
うまくいきません。

trv_Dir.BeginUpdate()
trv_Dir.Nodes.Clear()

trv_Dir.Nodes.Add(New TreeNode("D:\hoge"))
GetAllFiles(strcsvDir, "*.csv", files)

intCnt = files.Count

If intCnt <> 0 Then
For i = 0 To intCnt - 1
trv_Dir.Nodes(0).Nodes.Add( _
New TreeNode(Path.GetFileName(files(i))))
Next
trv_Dir.ExpandAll()
trv_Dir.EndUpdate()
Else
MessageBox.Show("csvファイルがディレクトリ内に存在しません。", strAppTitle,
MessageBoxButtons.OK, MessageBoxIcon.Exclamation,
MessageBoxDefaultButton.Button1)
End If


何方かご教示・ご指導お願い申し上げます。
Hasumi
ベテラン
会議室デビュー日: 2002/07/23
投稿数: 78
お住まい・勤務地: 神奈川・東京
投稿日時: 2004-11-09 16:35
Hasumiです。
引用:
コード:

trv_Dir.Nodes(0).Nodes.Add( _
New TreeNode(Path.GetFileName(files(i))))




コード:

Dim node As TreeNode = trv_Dir.Nodes.Add(New TreeNode("D:\hoge"))
GetAllFiles(strcsvDir, "*.csv", files)

intCnt = files.Count

If intCnt <> 0 Then
For i = 0 To intCnt - 1
node.Nodes.Add( _
New TreeNode(Path.GetFileName(files(i))))
Next


ではどうですか。

#流れがわからなくなるので勘違いしていたコードを再投稿

[ メッセージ編集済み 編集者: Hasumi 編集日時 2004-11-09 17:22 ]
みや
会議室デビュー日: 2004/07/09
投稿数: 13
お住まい・勤務地: 東京都
投稿日時: 2004-11-09 16:41
Hasumiさん、早速のご回答ありがとうございます。

試してみたのですが…TreeViewトップのD:\hogeは
消えたのですが、依然ボタンをクリックする度に
ファイル一覧が付加されてしまいます。
大変申し訳ございません、ご指導の程お願い申し上げます。
Lin
ベテラン
会議室デビュー日: 2004/11/08
投稿数: 50
投稿日時: 2004-11-09 16:59
TreeView側は問題ないように思えます。
GetAllFilesが問題ないか、もう一度確認されてみては。
Hasumi
ベテラン
会議室デビュー日: 2002/07/23
投稿数: 78
お住まい・勤務地: 神奈川・東京
投稿日時: 2004-11-09 17:13
Hasumiです。

先程はすみませんでした。
#勘違いにきずいて削除したけど遅かった。

コード:

trv_Dir.BeginUpdate()
trv_Dir.Nodes.Clear()

Dim node As TreeNode = trv_Dir.Nodes.Add("D:\hoge")

Dim files As String() = Directory.GetFiles("D:\hoge", "*.csv")
Dim file As String
For Each file In files
node.Nodes.Add(Path.GetFileName(file))
Next
trv_Dir.ExpandAll()
trv_Dir.EndUpdate()



ではどうなりますか。
私もGetAllFilesが怪しいと思います。

# C#と勘違いしていた個所を修正

[ メッセージ編集済み 編集者: Hasumi 編集日時 2004-11-09 17:23 ]

[ メッセージ編集済み 編集者: Hasumi 編集日時 2004-11-09 17:42 ]
みや
会議室デビュー日: 2004/07/09
投稿数: 13
お住まい・勤務地: 東京都
投稿日時: 2004-11-09 23:25
返事が大変遅くなり申し訳ございません。
まず、‘GetAllFiles’ですが、下記内容となっております。

Private Sub GetAllFiles(ByVal folder As String, _
ByVal searchPattern As String, ByRef files As ArrayList)
Dim fs As String() = _
System.IO.Directory.GetFiles(folder, searchPattern)
files.AddRange(fs)

Dim ds As String() = System.IO.Directory.GetDirectories(folder)
Dim d As String
For Each d In ds
GetAllFiles(d, searchPattern, files)
Next d
End Sub


さて、Hasumiさんにご教示頂いたソースコードで試させて頂いた結果、
見事!意図する動き・結果が得られました。

お忙しい所、誠に有難うございました。
(GetAllFilesを使用した結果、何故正常に動作しなかったのかという
点については今後調査していきたいと考えます)
Lin
ベテラン
会議室デビュー日: 2004/11/08
投稿数: 50
投稿日時: 2004-11-09 23:35
解決よかったですね。
うまくいかなかったのがなぜ、と突き詰めておくのもよいかと思います。
Files配列がbyRefですよね。
ボタンクリックごとにクリアされてますか?
1

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