Getting Selected Tree View Items in Desktop Windows Applications

Applies to TestComplete 15.47, last modified on January 20, 2023

When working with tree view controls, you may need to know which items are selected in it, in order to process them in a special way.

While testing tree view controls, you can use specific properties and methods of the corresponding program object to perform certain actions and obtain data stored in controls. You can call these methods and properties from your keyword tests, as well as from scripts. This topic describes how to work with the needed properties and methods from your scripts. However, when testing a control from your keyword test, you can use the same methods and properties calling them from keyword test operations. For more information, see Keyword Tests Basic Operations.

If the tree view control in the tested application works in the single-selection mode (that is, only one item can be selected at a time), you can determine the selected item using the Win32ToolBar.wSelected property. This property returns the full “path” to the selected item, which includes the item’s caption and captions of all of its parent items. See Getting the Current Tree View Item in Desktop Windows Applications.

If the tree view control supports multiple selection, the task is a little more complicated, since the Win32TreeView object does not provide any properties or methods that would return the list of all selected tree view items. However, a Win32TreeViewItem object, which provides access to individual tree view items, has the Selected property that indicates the item’s selected state. So, you can obtain the list of selected items by iterating through all tree view items and checking the Selected property of each item. Below is an example that demonstrates how you can do this.

This example contains the GetSelectedItems function that returns the list of selected tree view items. The function has two parameters:

  • TreeView - A Win32TreeView object that corresponds to the tested tree view control.
  • Separator - A character or string that will be used to separate item paths in the returned list. For example, you can use the new line character (“\r\n” in JavaScript, JScript, Python, C#Script and C++Script, vbNewLine constant in VBScript, #13#10 in DelphiScript).

The GetSelectedItems function returns the string containing the selected items’“paths” separated with Separator characters.

JavaScript

function Main ()
{
  var p, TreeView, str;

  // Obtain the TreeView control
  p = Sys.Process("Project1");
  TreeView = p.Window("TForm2", "Form2", 1).Window("TTreeView", "", 1);

  // Get the list of the selected items
  str = GetSelectedItems (TreeView, "\r\n");
  Log.Message (str);
}

function GetSelectedItems (TreeView, Separator)
{
  return GetSelectedItemsInternal (TreeView.wItems, "", Separator);
}

function GetSelectedItemsInternal (TreeViewItems, Path, Separator)
{
  var Item, str;

  str = "";

  // Iterate through the tree view items
  for (let i=0; i<TreeViewItems.Count; i++)
  {
    // Get an item
    Item = TreeViewItems.Item(i);
    // If the item is selected, save its "path" to the list
    if (Item.Selected)
      str += Path + "|" + Item.Text + Separator;
    // If the item has child items, process them as well
    if (!strictEqual(Item.Items, null))
      str += GetSelectedItemsInternal(Item.Items, Path + "|" + Item.Text, Separator);
  }

  return str;
}

JScript

function Main ()
{
  var p, TreeView, str;

  // Obtain the TreeView control
  p = Sys.Process("Project1");
  TreeView = p.Window("TForm2", "Form2", 1).Window("TTreeView", "", 1);

  // Get the list of the selected items
  str = GetSelectedItems (TreeView, "\r\n");
  Log.Message (str);
}

function GetSelectedItems (TreeView, Separator)
{
  return GetSelectedItemsInternal (TreeView.wItems, "", Separator);
}

function GetSelectedItemsInternal (TreeViewItems, Path, Separator)
{
  var Item, i, str;

  str = "";

  // Iterate through the tree view items
  for (i=0; i<TreeViewItems.Count; i++)
  {
    // Get an item
    Item = TreeViewItems.Item(i);
    // If the item is selected, save its "path" to the list
    if (Item.Selected)
      str += Path + "|" + Item.Text + Separator;
    // If the item has child items, process them as well
    if (Item.Items != null)
      str += GetSelectedItemsInternal(Item.Items, Path + "|" + Item.Text, Separator);
  }

  return str;
}

Python

def Main():

  # Obtain the TreeView control
  p = Sys.Process("Project1")
  TreeView = p.Window("TForm2", "Form2", 1).Window("TTreeView", "", 1)

  # Get the list of the selected items
  str = GetSelectedItems (TreeView, "\r\n")
  Log.Message (str)

def GetSelectedItems (TreeView, Separator):
  return GetSelectedItemsInternal (TreeView.wItems, "", Separator)

def GetSelectedItemsInternal (TreeViewItems, Path, Separator):

  str = ""

  # Iterate through the tree view items
  for i in range(0, TreeViewItems.Count-1):
    # Get an item
    Item = TreeViewItems.Item[i]
    # If the item is selected, save its "path" to the list
    if (Item.Selected):
      str += Path + "|" + Item.Text + Separator
    # If the item has child items, process them as well
    if (Item.Items != None):
      str += GetSelectedItemsInternal(Item.Items, Path + "|" + Item.Text, Separator)
      
  return str

VBScript

Sub Main
  Dim p, TreeView, str

  ' Obtain the TreeView control
  Set p = Sys.Process("Project1")
  Set TreeView = p.Window("TForm2", "Form2", 1).Window("TTreeView", "", 1)

  ' Get the list of the selected items
  str = GetSelectedItems (TreeView, vbNewLine)
  Log.Message (str)
End Sub

Function GetSelectedItems (TreeView, Separator)
  GetSelectedItems = GetSelectedItemsInternal (TreeView.wItems, "", Separator)
End Function

Function GetSelectedItemsInternal (TreeViewItems, Path, Separator)
  Dim Item, i, str

  str = ""

  ' Iterate through the tree view items
  For i = 0 To TreeViewItems.Count-1
    ' Get an item
    Set Item = TreeViewItems.Item(i)
    ' If the item is selected, save its "path" to the list
    If Item.Selected Then
      str = str & Path & "|" & Item.Text & Separator
    End If
    ' If the item has child items, process them as well
    If Not (Item.Items Is Nothing) Then
      str = str & GetSelectedItemsInternal(Item.Items, Path & "|" & Item.Text, Separator)
    End If
  Next

  GetSelectedItemsInternal = str
End Function

DelphiScript

function GetSelectedItems (TreeView, Separator); forward;
function GetSelectedItemsInternal (TreeViewItems, Path, Separator); forward;

procedure Main;
var p, TreeView, str : OleVariant;
begin
  // Obtain the TreeView control
  p := Sys.Process('Project1');
  TreeView := p.Window('TForm2', 'Form2').Window('TTreeView', '', 1);

  // Get the list of the selected items
  str := GetSelectedItems (TreeView, #13#10);
  Log.Message (str);
end;

function GetSelectedItems (TreeView, Separator);
begin
  Result := GetSelectedItemsInternal (TreeView.wItems, '', Separator);
end;

function GetSelectedItemsInternal (TreeViewItems, Path, Separator);
var Item, i, str : oleVariant;
begin
  str := '';

  // Iterate through the tree view items
  for i := 0 to TreeViewItems.Count-1 do
  begin
    // Get an item
    Item := TreeViewItems.Item[i];
    // If the item is selected, save its "path" to the list
    if Item.Selected then
      str := str + Path + '|' + Item.Text + Separator;
    // If the item has child items, process them as well
    if Item.Items <> nil then
      str := str + GetSelectedItemsInternal(Item.Items, Path + '|' + Item.Text, Separator);
  end;

  Result := str;
end;

C++Script, C#Script

function Main ()
{
  var p, TreeView, str;

  // Obtain the TreeView control
  p = Sys["Process"]("Project1");
  TreeView = p["Window"]("TForm2", "Form2", 1)["Window"]("TTreeView", "", 1);

  // Get the list of the selected items
  str = GetSelectedItems (TreeView, "\r\n");
  Log["Message"](str);
}

function GetSelectedItems (TreeView, Separator)
{
  return GetSelectedItemsInternal (TreeView.wItems, "", Separator);
}

function GetSelectedItemsInternal (TreeViewItems, Path, Separator)
{
  var Item, i, str;

  str = "";

  // Iterate through the tree view items
  for (i=0; i<TreeViewItems["Count"]; i++)
  {
    // Get an item
    Item = TreeViewItems["Item"](i);
    // If the item is selected, save its "path" to the list
    if (Item["Selected"])
      str += Path + "|" + Item["Text"] + Separator;
    // If the item has child items, process them as well
    if (Item["Items"] != null)
      str += GetSelectedItemsInternal(Item["Items"], Path + "|" + Item["Text"], Separator);
  }

  return str;
}

See Also

Working With Tree View Controls in Desktop Windows Applications
wSelection Property (Specific to Win32TreeView Controls)
Selected Property (TreeViewItem Objects)
Getting the Current Tree View Item in Desktop Windows Applications

Highlight search results