- - PR -
TreeViewコントロールの使い方
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-11-01 14:14
お世話になります。VB.NET初心者です。
今、WindowsApplicationで勉強を兼ねてちょっとしたツールを作っています。 やりたいことは、 フォルダを選択しそのフォルダ内のテキストファイルをTree表示する。 そしてTree内のファイルを選択すると、隣のTextBoxに内容を表示するというものです。 フォルダ内のファイル名をノードとして一覧にする所まではできましたが、 選択してファイルをオープンするところが解りません。 ご存知の方、いらっしゃったら教えていただけませんか? (何分素人なものでうまく表現できなくてすみません。) | ||||||||||||||||
|
投稿日時: 2003-11-01 17:12
こんにちわ。諸農です。
ツリー表示できていると言うことは、選択されたノードからファイル名は取得できると思います。 右ペインに用意したTextBoxに読み込んだテキストデータの表示ですが、 StreamReaderクラスを使ってみては如何でしょうか。 SDK HELP ms-help://MS.NETFrameworkSDKv1.1.JA/cpguidenf/html/cpconreadingtextfromfile.htm 文字コードなどの違いを意識する場合は、コンストラクタでEncodingの指定を行ってください。 また、テキストデータの表示にTextBoxではなく、RichRextBoxを使うと、LoadFileメソッドでそのままファイルを指定して読み込むことができます。 色々組み合わせて試してください。 ではでは(^^)/ _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||||||||||
|
投稿日時: 2003-11-01 20:57
諸農さん。ありがとうございます。
色々試してみました。 が、ツリーノードを選択してファイル名を取得する所がよく解らないのですが。。 も少しヒントを貰えないでしょうか? 後、TextBoxからRichTextBoxにしてみました。テキストボックスより簡単に ファイルの読み込みが出来ました。以前は1行ずつ読み込んでループさせていましたが、 コーディングが1行で済みました。 | ||||||||||||||||
|
投稿日時: 2003-11-01 23:39
一案としてツリーノードを追加する際に
ツリーノードのTagプロパティにファイルのパスを 入れておくのはどうでしょう? 表示内容によって可能なのであれば ツリーノードのFullPathプロパティを使う方が スマートな気はしますが | ||||||||||||||||
|
投稿日時: 2003-11-02 00:24
Tohruさんレスありがとうございます。
えっと、TagプロパティやFullPathプロパティがうまく使えないのですが。。。 フォームにボタンとツリービューがあり、ボタンを押すと フォルダーブラウザダイアログが表示されフォルダを取得するというものです。 もしよければ何かご意見をお願いできますか? '--------------------------------' Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim fbd As New FolderBrowserDialog Dim drv As String Dim strTemp() As String Dim strTempMax As String Dim Lavel1 As String Dim nodeA As New TreeNode fbd.Description = "フォルダを指定して下さい" fbd.ShowNewFolderButton = False fbd.RootFolder = Environment.SpecialFolder.Desktop If fbd.ShowDialog(Me) = DialogResult.OK Then drv = fbd.SelectedPath TreeView1.Nodes.Clear() nodeA = TreeView1.Nodes.Add(drv.ToString) For Each Lavel1 In System.IO.Directory.GetFiles(drv) strTemp = Split(Lavel1, "\") strTempMax = UBound(strTemp) nodeA.Nodes.Add(strTemp(strTempMax).ToString) Next End If | ||||||||||||||||
|
投稿日時: 2003-11-02 10:54
こんにちわ。諸農です。
ツリービューにノードを追加する方法ですが、どのようにしていますか。 表示されているのは、例えば、次のような形になっているのでしょうか。
例えば、各ノードのラベル(Textプロパティ)をつなぎ合わせると、そのままファイル パスになるのでしたら、TreeViewコントロールのPathSeparatorプロパティに「\」記号 をセットしておくことで、選択されているノードのFullPathプロパティを参照することで、 ファイルパスを取得することが出来ます。 各ノードのラベル(Textプロパティ)に使っている文字列を順に親ノードに向かって辿っ て行っても、ファイルパスを作ることが出来ない--例えば、フォルダ名やファイル名は ノードのTagプロパティなどに格納している--のであれば、自前の処理で、選択ノードから 順に親ノードをParentプロパティを使ってたどることになると思います。 前者のノードのテキストを組み合わせればファイルパスになる方法ですが、 次のような感じでOKだと思います。(C#ですので、読み替えてください)
ここでは、TextBoxで指定されたディレクトリ(フォルダ)が存在していれば、 そのフォルダをルートノードにしてツリービューを作成します。 作成したツリービューのノードを選択されたら、そのノードのFullPathプロパティを ラベルに表示します。 ではでは(^^)/ _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||||||||||
|
投稿日時: 2003-11-02 12:05
こんにちわ。諸農です。
補足です。
ここで、システム属性のものがヒットした場合は、 再帰処理に持っていかないようにしないといけませんね(^_^; それと、
検索ルートが「C:\」の場合は、ルートノードのラベルには 「\」記号を除いたものを指定する必要ありですね。 時間が無いので、訂正コードは無しです(^^; すみませんm(__)m _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||||||||||
|
投稿日時: 2003-11-06 10:13
TagプロパティFullPathプロパティを試している部分が
掲載ソースには無い様ですが・・・ FullPathプロパティの方はJubeiさんが説明くださっているので 私はTagプロパティの方を 掲載ソースの宣言部に Dim nodeB As New TreeNode を追加し nodeA.Nodes.Add(strTemp(strTempMax).ToString) の部分を nodeB = nodeA.Nodes.Add(strTemp(strTempMax).ToString) nodeB.Tag = Lavel1 とすることで各ノードにファイルパスの情報を持たせることが出来ると思います 取り出し時には 対象ノード.Tag.ToString() でファイルパスを取り出せます 実行確認はとっていないので、もし間違いがあればごめんなさい 掲載ソースの様な形であれば、 私ならおそらくdrvの内容をstring変数に保存させておいて 選択時にFullPathプロパティの内容と結合して使うと思います |