Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
1-7438
Илайдж
2003-06-23 14:06
2003.07.03
Печать содержимого TImage.


1-7432
BJValentine
2003-06-23 12:16
2003.07.03
Обработчики событий формы


14-7711
Aga
2003-06-17 18:39
2003.07.03
Проба


14-7601
XobBIT
2003-06-17 23:24
2003.07.03
Мастера подскажите аналог IIS или Apache


1-7392
Mihey
2003-06-23 00:48
2003.07.03
Сделать OnMouseEnter и OnMouseLeave для компонента...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский