Hi Bill,
TestComplete assigns indexes to controls with the same name according to their z-order. So, the topmost form will have index 1. Here is the example of identifying forms according to their z-order:
var className = "Form";
var caption = "";
var i = 1;
var frm = parentObj.WaitWinFormsObject(className, caption, 1, 1000); //replace parentObj with the actual object
while (true == frm.Exists) {
Log.Message("Form #" + i + ": " + frm.Name);
i++;
frm = parentObj.WaitWinFormsObject(className, caption, i, 1000); //replace parentObj with the actual object
}