C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Data в TreeView, можно ли в Data загонять строку
WindFly
Отправлено: 08.06.2005, 10:02


Ученик-кочегар

Группа: Участник
Сообщений: 6



Я видел как люди при работе с TreeView в параметр Data записывали целые числа, а можно ли туда записывать и потом считывать строки? И если можно, то как это сделать? У меня так и не получилось... sad.gif
Guest
Отправлено: 08.06.2005, 10:45


Не зарегистрирован







Только указатели на строку.
В data можно загонять все, приводимое к int.
Gedeon
Отправлено: 08.06.2005, 10:58


Ветеран

Группа: Модератор
Сообщений: 1742



CODE

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
   TTreeNode *PARENT = TreeView1->Items->AddObject(NULL,"Parent",(void*)"Parent Text");
   TreeView1->Items->AddChildObject(PARENT,"Child",(void*)"Child Text");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TreeView1Change(TObject *Sender, TTreeNode *Node)
{
Memo1->Lines->Add((char*)Node->Data);
}
//---------------------------------------------------------------------------
WindFly
Отправлено: 08.06.2005, 11:37


Ученик-кочегар

Группа: Участник
Сообщений: 6



Спасибо большое. С записью я и сам уже разобрался, вот вытащить обратно не получалось. Ещё раз thanks.
WindFly
Отправлено: 08.06.2005, 12:19


Ученик-кочегар

Группа: Участник
Сообщений: 6



Какя-то странная трабла — (Node->Data) возвращает значение последнего созданого узла независимо от того в который из них я тыкаю мышкой. Имена и индексы возвращаются нормально, а дата — нет.
Guest
Отправлено: 08.06.2005, 12:54


Не зарегистрирован







Selected->Data ?
WindFly
Отправлено: 08.06.2005, 13:34


Ученик-кочегар

Группа: Участник
Сообщений: 6



QUOTE (Guest @ 08/06/2005, 12:54)
Selected->Data ?

Да нет. Всё происходит в обработчике TreeView1Changing.
Вот кусок кода
CODE

void __fastcall TForm1::TreeView1Changing(TObject *Sender, TTreeNode *Node,
     bool &AllowChange)
{
Memo1->Lines->Add(Node->Text);
Memo1->Lines->Add(AnsiString(Node->Index));
Memo1->Lines->Add((char*)(Node->Data));
}


вот первые две строки работают нормально, а третъя у меня выводит значение из последнего созданного узла. А если сделать в точности как Gedeon, то из родительского.
Guest
Отправлено: 08.06.2005, 13:42


Не зарегистрирован







А вы обратили внимание, что Gedeon писал в дату константную строку. Скорее всего вам нужно под каждую строку выделять место и только потом заполнять дату. И не забывайте удалать строки.
Konstantine
Отправлено: 08.06.2005, 16:55


Мастер участка

Группа: Модератор
Сообщений: 545



ИМХО лучше отвести массив строк (или TStringList) и в Дате запоминать номер строки...
WindFly
Отправлено: 08.06.2005, 17:20


Ученик-кочегар

Группа: Участник
Сообщений: 6



Поэкспериментировал и понял: в Data можно записать только число, строка не записывается, а записывается только указатель на неё.
Попробуйте приведённым способом записать в Data строку из строковой переменной, а перед возвратом содержимого Data эту переменную изменить.

Собственно, это и было высказано кем-то в самом начале

Отредактировано WindFly — 08/06/2005, 17:55

Вернуться в Вопросы программирования в C++Builder