OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

TreeViewについて

  • すぐに回答を!
  • 質問No.213676
  • 閲覧数1056
  • ありがとう数2
  • 気になる数1
  • 回答数2
  • コメント数0

お礼率 79% (39/49)

いつも大変お世話になっております。福島です。

TreeViewのことで教えて頂きたいのですが・・・

社員登録で3階層(部・課・社員)のツリー構造をなす
TreeViewを作成しましたが、1社員の情報を変更したときに
状態を反映するためにTreeView全体を消去してから書き直しています。
(例えば)課や部を移動したとき
しかし表示する数が多くなってきた為に再構築に非常に時間が
かかってしまい実用的でなくなってしまいました。

あるノードの下だけ変更(削除)する方法はありますか?

今は、「treeView.Nodes.Clear」を使用して全体を削除して
再度ツリーを作成しています。

aNode(部)
bNode(課)
cNode(社員)

のようになっています。

宜しくお願い申し上げます。

Windows2000SP2 + VB6.0SP4
通報する
  • 回答数2
  • 気になる1
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル12

ベストアンサー率 65% (276/422)

サンプルです。
TreeViewとコマンドボタンが必要です。

NodesはNodeオブジェクトのコレクションです。
As Collection と言う宣言を使用したことがある人ならわかると思うのですが、未経験者であれば、これを機に覚えることをお勧めします。
Collectionは登録時にKeyを仕込むことができます。
サンプルで言うと
.Add "会社", tvwChild, "経理部", "経理部"
というのは
.追加 "親となる物のキー", 自分は子, "キー文字列", "TreeViewに表示するテキスト"
となります。そのキーは重複することの無いように登録をしなければいけません。
そうすることによりキーでNodesコレクションからNodeオブジェクトの情報を取得することができます。
それを指定してあげると、削除できます。
また、キー文字列を指定しないでも、TreeViewの表示順にIndex値を持ちますので、それを利用してもオブジェクトの指定ができます。

注意すべきはNodesコレクションに追加するときは、キーには数値を登録できないことです。
"1"とかは無理ですが、"1A1"などは可能です。

Option Explicit

Private Sub Command1_Click()
  Dim nodWork As Node
  Dim lngSts As Long
  
  With Me
    With .TreeView1
      Set nodWork = .SelectedItem
      If nodWork Is Nothing Then
        Call MsgBox("未選択なので、削除無効")
        Exit Sub
      End If
      
      lngSts = MsgBox("[" & nodWork.Text & "]を削除しますか?", vbOKCancel)
      If lngSts = vbCancel Then
        Exit Sub
      End If
      
      '選択中のノードを削除
      .Nodes.Remove nodWork.Key
      '下のような表現でもよい(キー文字列かIndex文字列を渡す)
      '.Nodes.Remove nodWork.Index
    End With
  End With
End Sub

Private Sub Form_Load()
  With Me
    With .TreeView1
      With .Nodes
        'NODEを追加
        'これについては説明不要とします。。。
        .Add , , "会社", "会社"
      
        .Add "会社", tvwChild, "経理部", "経理部"
        .Add "経理部", tvwChild, "財務課", "財務課"
        .Add "経理部", tvwChild, "購買課", "購買課"
        
        .Add "会社", tvwChild, "総務部", "総務部"
        .Add "総務部", tvwChild, "総務課", "総務課"
        .Add "総務部", tvwChild, "用務課", "用務課"
        
        .Add "会社", tvwChild, "営業部", "営業部"
        .Add "営業部", tvwChild, "法人営業課", "法人営業課"
        .Add "営業部", tvwChild, "お客様サービス課", "お客様サービス課"
      End With
      
      '経理部が初期表示で見えるようにする(同時に、並列の総務部や営業部などの部も見えるようになる)
      .Nodes("経理部").EnsureVisible
      
      '下のような表現でもよい(TreeView内において[経理部]は Index=2だから)
      '.Nodes(2).EnsureVisible
      
    End With
    .Command1.Caption = "削除"
  End With
End Sub
お礼コメント
Chika-F

お礼率 79% (39/49)

丁寧にご指導頂きありがとう御座いました。
とても勉強になりました。やってみましたが
上手くいきました。ポイントはRemoveだったの
ですね。分かってしまえば簡単なんですが・・・
それを調べるのが下手なんでしょうね。私は。
一生懸命MSDNと向き合っているつもりなのですが!
本当にありがとう御座いました。
投稿日時 - 2002-02-08 11:07:24
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル9

ベストアンサー率 33% (33/98)

VBのコントロールにはメソッドがないようなのですが C++ではマクロの TreeView_DeleteItem を使用すれば可能なようです。 英語のMSDNにしか記載されてないようですが^^; http://msdn.microsoft.com/library/en-us/shellcc/platform/CommCtls/TreeView/Macros/TreeView_DeleteIte ...続きを読む
VBのコントロールにはメソッドがないようなのですが

C++ではマクロの TreeView_DeleteItem を使用すれば可能なようです。

英語のMSDNにしか記載されてないようですが^^;
http://msdn.microsoft.com/library/en-us/shellcc/platform/CommCtls/TreeView/Macros/TreeView_DeleteItem.asp?frame=true

内部的に TVM_DELETEITEM メッセージをツリービューに送る様なので、SendMessageで代用出来きます。
http://msdn.microsoft.com/library/en-us/shellcc/platform/CommCtls/TreeView/Messages/TVM_DELETEITEM.asp?frame=true

lParam にはHitTestの結果を渡せばよいと思います。
http://msdn.microsoft.com/library/en-us/shellcc/platform/CommCtls/TreeView/Messages/TVM_HITTEST.asp?frame=true

VC付属の commctrl.h には以下のように宣言されています

#define TV_FIRST 0x1100 // TreeView messages
#define TVM_DELETEITEM (TV_FIRST + 1)
#define TVM_HITTEST (TV_FIRST + 17)

試してないので動かなかったらごめんなさい。
お礼コメント
Chika-F

お礼率 79% (39/49)

貴重なアドバイスをありがとう御座います。
以前にDOS時代のCやC++はやったんですが
Windowsになってからちょっと離れていた為に
最近ではVisual言語についていけなくて・・・(涙)
いまの時代VCは当たり前なんですよね。
やっぱり勉強しなければ!
頑張ります。ありがとう御座いました。
投稿日時 - 2002-02-08 11:01:20


このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ