I don't think memory is an issue as these are not big treeviews and the
arrays
are only small.
The beauty of this approach is that there always is a direct relation
between
the treeview node and the node data.
For example delete node, automatically data gone as well, etc.
So the gain will be simplicity and less code.
I think I will give it a go.
RBS
"keepITcool" <xrrcvgpbby@puryyb.ay> wrote in message
news:xn0e3zdkke6rm8k00gkeepitcoolnl@msnews.microsoft.com...
>
> i'm not sure
>
> WHY do you need to hold an array per node?
> isn't that memory inefficient?
>
> I'd probably use the node's KEY.
> and keep my data in 1 big array.
>
> Use a dictionary for mapping "key" to
> array "position"
>
>
>
>
> --
> keepITcool
> | www.XLsupport.com | keepITcool chello nl | amsterdam
>
>
> RB Smissaert wrote :
>
>> KeepITCool,
>>
>> > 'this works
>> > Dim v
>> > v = .Tag
>> > v(UBound(v, 1), UBound(v, 2)) = "indirect"
>> > .Tag = v
>>
>> Thanks for that, that works indeed!
>> Just wonder how you came up with that.
>> If I can implement this fully it will simplify a lot of things.
>> For example deleting or inserting nodes could be done without complex
>> array manipulations.
>> It would be a reasonably big re-write of my app, but I think it would
>> be worth it on the long run.
>>
>> RBS
>>
>>
>> "keepITcool" <xrrcvgpbby@puryyb.ay> wrote in message
>> news:xn0e3zc2je4qmk500fkeepitcoolnl@msnews.microsoft.com...
>> >
>> >
>> > yeah.. strange.
>> > probably due to passing the node byval
>> >
>> > Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
>> > With Node
>> > If IsArray(.Tag) Then
>> > 'this works
>> > Dim v
>> > v = .Tag
>> > v(UBound(v, 1), UBound(v, 2)) = "indirect"
>> > .Tag = v
>> > 'this fails
>> > .Tag(UBound(.Tag, 1), UBound(.Tag, 2)) = "direct"
>> > MsgBox .Tag(UBound(.Tag, 1), UBound(.Tag, 2))
>> > End If
>> > End With
>> > End Sub
>> >
>> > Private Sub UserForm_Initialize()
>> > Dim arr(1 To 10, 1 To 35) As String
>> > With TreeView1
>> > With .Nodes
>> > With .Add(, tvwChild, "key1", "text1")
>> > .Tag = arr
>> > End With
>> > End With
>> > End With
>> > End Sub
>> >
>> >
>> >
>> > --
>> > keepITcool
>> > > www.XLsupport.com | keepITcool chello nl | amsterdam
>> >
>> >
>> > RB Smissaert wrote :
>> >
>> >> Trying to find a better way to let a treeview hold data and thought
>> >> that perhaps the Tag of the treeview nodes could hold arrays, so I
>> >> tried this.
>> > >
>> >> In one Sub:
>> > >
>> >> dim arr(1 to 2, 1 to 35)
>> > >
>> >> Set nodx = _
>> >> MainForm.TreeView1.Nodes.Add(actNodeKey, tvwChild, , , Image:=3)
>> > >
>> >> nodx.tag = arr
>> > >
>> >> Then in another Sub:
>> > >
>> >> .TreeView1.SelectedItem.Tag(1, 8) = "test"
>> > >
>> >> But when I run this for the first time I get an out of stack space
>> >> error and the second time Excel just unloads, so a crash.
>> > >
>> >> Couldn't find anything about how this could be done, but if it
>> could >> work it would be better than the way I do this now, which is
>> hold the >> node data in an array and update the array according to
>> what happens >> to the nodes. Thanks for any advice.
>> > >
>> > >
>> >> RBS
Bookmarks