treeview node tag hold array?

R

RB Smissaert

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
 
K

keepITcool

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 :
 
R

RB Smissaert

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
 
K

keepITcool

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 :
 
K

keepITcool

Bart,

else send me an example by email of
what you'r trying to do exactly.

email below. just add @ and .

--
keepITcool
| www.XLsupport.com | keepITcool chello nl | amsterdam


keepITcool wrote :
 
R

RB Smissaert

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top