Уважаемые тестировщики!
Подскажите, пожалуйста, как проверить наличие ветви в дереве на базе компоненты TTreeView в Delphi перед кликом?
m.NavigatorTree.Click('|Все документы|'+archive_name);
try... except не помогает, т.к. это не exception, а просто error...
Можно последовательно перебирать все узлы текущей ветки и проверять их текст, но, возможно, существует более короткое и элегантное решение?
как проверить наличие ветви в TreeView?
Автор M.A.N., 21 мар 2005 09:35
Сообщений в теме: 2
#1
Отправлено 21 марта 2005 - 09:35
#2
Отправлено 21 марта 2005 - 11:53
Здравствуйте.
Можно использовать обработчик события OnLogError: в нем проверять ошибку и записывать результат в некоторую глобальную переменную. Подробнее можно найти в топиках "OnLogError Event" и "Events and Event Handlers".
А можно использовать следующую функцию, которая пробегает по всем нодам дерева и проверяет, есть ли указанный узел:
[DelphiScript]
function itemExists(treeItems, Path);
var obj, posit, str, i, item;
begin
Result := false;
posit := Pos('|', Path);
if (posit = 1) then
begin
Path := Copy(Path, 2, Length(Path));
posit := Pos('|', Path);
end;
if (posit > 0) then str := Copy(Path, 1, posit-1)
else str := Path;
for i:=0 to treeItems.Count-1 do
begin
item := treeItems.Item[i];
if (item.Text = str) then
begin
str := Copy(Path, posit+1, Length(Path));
if (posit = 0) or (itemExists(item, str)) then Result := true;
exit;
end;
end;
end;
...
if itemExists(m.NavigatorTree.Items, '|Все документы|'+archive_name) then
...
Можно использовать обработчик события OnLogError: в нем проверять ошибку и записывать результат в некоторую глобальную переменную. Подробнее можно найти в топиках "OnLogError Event" и "Events and Event Handlers".
А можно использовать следующую функцию, которая пробегает по всем нодам дерева и проверяет, есть ли указанный узел:
[DelphiScript]
function itemExists(treeItems, Path);
var obj, posit, str, i, item;
begin
Result := false;
posit := Pos('|', Path);
if (posit = 1) then
begin
Path := Copy(Path, 2, Length(Path));
posit := Pos('|', Path);
end;
if (posit > 0) then str := Copy(Path, 1, posit-1)
else str := Path;
for i:=0 to treeItems.Count-1 do
begin
item := treeItems.Item[i];
if (item.Text = str) then
begin
str := Copy(Path, posit+1, Length(Path));
if (posit = 0) or (itemExists(item, str)) then Result := true;
exit;
end;
end;
end;
...
if itemExists(m.NavigatorTree.Items, '|Все документы|'+archive_name) then
...
С уважением,
Дмитрий
Дмитрий
#3
Отправлено 21 марта 2005 - 12:43
Спасибо, Dmitry N, за обстоятельный ответ.
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных