Forum Discussion

MulgraveTester's avatar
MulgraveTester
Frequent Contributor
10 years ago
Solved

How can I test if a menu tree item exists before clicking it

I am working with a SysTreeView32 object. The tree structure in this object will change dynamically so I want to test if the menu item exists before r-clicking it. There is no "exists" property for items inside this control. What is an efficient way of testing if an item exists before clicking it?

 

'This is what I am trying to do in VBS

myItem = "|root|sub-item|childItem"

if myMenuTree.wItems.item(myItem).exists then 'Object doesn't support this property or method

  call myMenuTree.ClickItemR(myItem)

else

  log.error("The item did not appear in the menu tree")

end if

 

This link doesn't give any clues that I can see

7 Replies

  • in here study the SaveChildItems methoed 

    you may modify it and use for your purpose or

    simply save to a file (as it is) and read that file.

    • Hi Mulgravetester,

       

      I believe that you can use the aqString.Find method to check if the target item is in the list:

        Res = aqString.Find(myMenuTree.wItems, myItem)
        If Res <> -1 Then
          Log.Message(myItem & " was found in string")
          Call myMenuTree.ClickItemR(myItem)
        end if
      • Colin_McCrae's avatar
        Colin_McCrae
        Community Hero

        Does the wItem property just list the individual node names?

         

        In which case, it may find a single element. But it won't validate that it exists in the correct place in the tree view.

         

        So if child nodes, of child nodes, of child nodes, all have the same name (which is quite possible - happens quite frequently in the tree objects I test) then you may find a match, but it may not be the right one, or in the right place.

         

        The way I do it with Delphi trees is to select the item (using a left click - a right click triggers different options) and then afterwards check that the current selection is what you asked it to click on. Using the full pipe locator, so you know you got the correct node. If it doesn't match, the node didn't exist.

         

        If the node doesn't exist, it doesn't throw any sort of error for me? It just carries on regardless. So I don't even have to bother putting it inside a try/catch. But you could if a bad selection caused an error.

         

        This is fine for me as left clicking an item is fine to simply see if it exists. You have to start double or right clicking before anything actually happens. Of course, your application may not work that way in which case this approach may not work.