ご指導お願い致します。(VB6.0環境)
ツリーにノードを移動させるためにINDEXを指定してADDしようとしているのですが、INDEXの指定をしているのにもかかわらず、挿入(ADD)したノードのINDEXが指定した通りに設定されません。見かけ上は上手く移動したように見えるのですが、2度目のADDでINDEXが違うため上手く移動できないのです。どうしたら指定とおりのINDXになるのでしょうか。
Dim m As ComctlLib.Node
ns As Nodes
TgtNd As ComctlLib.Node
Set m = ns.Add(TgtNd.index, tvwPrevious, Format(s_id, "00000000000000000000"), s_name, IMAGE_FOLDER)
TgtND.index(たとえば4)だとするとm.indexが100(一番最後かと思われる)になってしまいます。指定した4の前(3)に入れたいのですができません。
よろしくお願い致します。
自分の前に挿入という事は、一つ前の後ろということで、
Set m = ns.Add(TgtNd.Previous, tvwNext, Format(s_id, "00000000000000000000"), s_name, IMAGE_FOLDER)
でどうですか。
題名のINDEXが間違っていました。お恥ずかしい・・・
早速の返答ありがとうございます。
ご指摘通りにやってみましたが、問題が出ました。一番初めのTgtNdの場合、前がないのでエラーになりました。
それ以外の場所でAdd したのですが、移動は出来るのですがINDEXの数値は変わらずです。ちなみにTgtNd.indexは狙い通りのindexであるのは間違いありませんでした。何故Addするとindexが変わるのか。。。。分かりません。
> Dim m As ComctlLib.Node
VB6 なのですよね。
なぜ、TreeView v6 ではなく、TreeView v5 を使っておられるのでしょう?
それと Index プロパティは、ノード数の増減に応じて変動する可能性が
ありますので、管理情報として使うにはあまり適していないと思います。
変動しない情報(Key プロパティ、あるいは Node 自体への参照)を
管理情報に用いた方が良いのでは無いでしょうか。
Nodes.Add の第一引数には、Indexだけでなく、「Key」や
「Nodeそのもの」を指定することもできるわけですし。
他人のPGのだったもので気づきませんでしたが、VB5のソースが混じっていたようです。ご指摘ありがとうございます。
INDEXが変なのはどうも、ターゲットノード.FirstSiblingの前にAddをしているのが原因みたいです。Indexを指定しないで尚且つ一番初めのノードの前にAdd しない方法を考えたいと思います。
どうもありがとうございました。
indexの呪縛からなかなか抜けられないようですね。
MSDNで「Index プロパティ (ActiveX コントロール)」を一度
見て下さい、あなたの考えているものと別物かも。
ツイート | ![]() |