RE: [WIN32Lib] TreeView pblm: erase, addTVItem, & getTVSelectedText cause crash
- Posted by Matthew Lewis <matthewwalkerlewis at YAHOO.COM> Oct 16, 2001
- 349 views
> -----Original Message----- > From: Dan Moyer [mailto:DANIELMOYER at prodigy.net] > > I'm having a problem in using TreeView, whereby if I erase > and repopulate a > TV, *after* I have selected an item in the TV, my program > crashes. If I > remove the "erase" function for the items that I have before > the repopulate, > no crash (but dupl stuff in TV). > Dan, first thing you should do is check deleteItem() in win32lib. There was a (read: my) bug in there with regard to both list and treeviews. Essentially, some internal bookkeeping wasn't done correctly, and when windows checked on an item (text is stored by win32lib), it wasn't there, causing a crash. Make sure your copy looks like this (for ListView & TreeView): elsif window_type[ id ] = ListView then if pos = -1 then msg = LVM_DELETEALLITEMS iItem = 1 while iItem <= length( lvitem_owner ) do if lvitem_owner[iItem] = id then removeLVItem( iItem ) if iItem < length(lvitem_owner) then iItem += 1 end if else iItem += 1 end if end while else LV_FINDINFO = struct_LVFINDINFO( LVFI_PARAM, "", pos, 0, 0, 0) iItem = sendMessage( id, LVM_FINDITEM, -1, LV_FINDINFO ) + 1 release_mem(LV_FINDINFO) if not iItem then return 0 end if msg = sendMessage( id, LVM_DELETEITEM, iItem-1, lParam ) if msg then removeLVItem( pos ) end if return msg elsif window_type[ id ] = TreeView then msg = TVM_DELETEITEM if pos = -1 then lParam = TVI_ROOT -- changed to only delete items in the treeview specified iItem = 1 while iItem <= length( tvitem_owner ) do if tvitem_owner[iItem] = id then removeTVItem( iItem ) if iItem < length(tvitem_owner) then iItem += 1 end if else iItem += 1 end if end while else