Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.03;
Скачать: CL | DM;

Вниз

TreeView   Найти похожие ветки 

 
PiboDIE ©   (2003-06-21 08:43) [0]

Проблема:Даю код... кто понимает, тот поймет...
for i := 0 to TreeView.Items.Count-1 do
begin
if (TreeView.Items[i].HasChildren)
and(Edit1.Text=TreeView.Items[i].Text) //тут проверка выполняется
and(Edit2.Text<>"")then
begin
for j := i+1 to TreeView.Items.Count-1 do
begin
if (Edit2.Text=TreeView.Items[j].Text) //а вот тут нет
or(TreeView.Items[j].HasChildren) then Exit;
end;
end
else if(TreeView.Items[i].HasChildren)
and(Edit1.Text=TreeView.Items[i].Text)
and(Edit2.Text="")then exit;
end;

Цель: емеется два едита, и одно дерево, состоящее из элементов - parent (родитель - один)который в свою очередь может содержать child(но они не являются родителями. т.е. 1 ступень)
Необходимо проверить - имеется ли в дереве родитель, похожий на текст Edit1, если есть и Edit2 не пустое, то проверить, содержит ли этот родитель элемент равный Edit2.Если элементы в дереве имеются, то выход из процедуры, если не имеется то я вношу в базу данные из Edit1 и Edit2(если не пустой)


 
ЮЮ ©   (2003-06-21 08:57) [1]

Что значит проверка не выполняется? :-)


 
MBo ©   (2003-06-21 09:06) [2]

if (Edit1.Text<>"") and (Edit2.Text<>"") then
for i:=0 to TreeView1.Items.Count-1 do
if TreeView1.Items[i].Level>0 then
if (TreeView1.Items[i].Text=Edit2.Text) and
(TreeView1.Items[i].Parent.Text=Edit1.Text) then
Memo1.Lines.Add(TreeView1.Items[i].Parent.Text+" "+
TreeView1.Items[i].Text);


 
Palladin ©   (2003-06-21 09:12) [3]

1
вот это условие вообще следует поставить перед циклом, нечего код нагромождать...
if Edit2.Text<>"" then цикл...

2
for j := i+1 to TreeView.Items.Count-1 do
begin
if (Edit2.Text=TreeView.Items[j].Text) //а вот тут нет
or(TreeView.Items[j].HasChildren) then Exit;
end;
это что по твоему? это всего лишь пробег до конца первого уровня дерева...
где ты по child у текущего пункта бежишь, мне не известно...

3
вот код, пусть это у тебя функция которая возврашает true если такая пара найдена и false если не найдена

result:=false
if Edit2.Text<>"" then
for i := 0 to TreeView.Items.Count-1 do
begin
if (TreeView.Items[i].HasChildren) and (Edit1.Text=TreeView.Items[i].Text) then
begin
for j := 0 to TreeView.Items[i].Count-1 do
if (Edit2.Text=TreeView.Items[i].Item[j].Text) then
begin
result:=true;
break;
end;
if result then break;
end;


> кто понимает, тот поймет...

а за это бьют, это косвенное обвинение в непоноценности участников форума не ответивших тебе хоть что нибудь...


 
PiboDIE ©   (2003-06-21 09:37) [4]

Мне все равно, кто ответил кто нет... если помогли, то спасибо Вам огромное, я лично никого в неполноценности не обвиняю, каждый понимает по-своему.
1: Дело в том, что Edit2 МОЖЕТ быть пустым...
2: Это пробег не до конца первого уровня, а от первого дочернего элемента до последнего, которые находятся в подчинении родительского элемента.
3: Спасибо за помощь но это не совсем то, что мне нужно.... пары может и не быть... (Edit1 обязательный элемент, Edit2 может оставаться пустым...)


 
PiboDIE ©   (2003-06-21 09:40) [5]

to Palladin
Спасибо за строку (Edit2.Text=TreeView.Items[i].Item[j].Text)
Вот она то мне и нужна....


 
Palladin ©   (2003-06-21 09:52) [6]

если Edit2 может быть пустым тогда другое дело и кстати звиняюсь за 6 строку, там begin не должно быть


result:=false
if Edit1.Text<>"" then
for i := 0 to TreeView.Items.Count-1 do
begin
if (TreeView.Items[i].HasChildren) and (Edit1.Text=TreeView.Items[i].Text) then
if Edit2.Text="" then result:=true else
for j := 0 to TreeView.Items[i].Count-1 do
if (Edit2.Text=TreeView.Items[i].Item[j].Text) then
begin
result:=true;
break;
end;
if result then break;
end;



 
PiboDIE ©   (2003-06-21 10:14) [7]

to Palladin
Ещё раз ОГРОМНОЕ тебе СПАСИБО...


 
PiboDIE ©   (2003-06-21 12:54) [8]

Вот правильный (конечный, для тех кого интересует) вариант:

for i := 0 to tvCarsTree.Items.Count-1 do
begin
if(tvCarsTree.Items[i].HasChildren)and(AnsiCompareText(edNewBrand.Text,tvCarsTree.Items[i].Text)=0)
then if edNewModel.Text="" then exit
else
for j := 0 to tvCarsTree.Items[i].Count-1 do
if(AnsiCompareText(edNewModel.Text,tvCarsTree.Items[i].Item[j].Text)=0)then exit;
end;



Страницы: 1 вся ветка

Текущий архив: 2003.07.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
9-7282
Alek Aaz
2003-01-16 05:06
2003.07.03
За и против GLscene


14-7680
-LEX-
2003-06-16 18:26
2003.07.03
Подскажите, какой из учебников по Delphi 6 лучше купить?


11-7370
Alexander
2002-10-24 13:42
2003.07.03
Можно ли TKOLTrayIcon применять в сервисах?


3-7321
vantage10
2003-06-06 13:58
2003.07.03
SQL запрос, бд-MS Access, по времени


6-7580
softmaster
2003-04-28 21:26
2003.07.03
коннект с SMTP-сервером