Текущий архив: 2005.01.02;
Скачать: CL | DM;
Вниз
Интересные факты о TreeView Найти похожие ветки
← →
tazik © (2004-12-18 19:13) [0]Всем привет!
Я пишу такую штуку: Создаю на форме объекты и одновременно создаю Node"ы в TreeView. В качестве надписи для node я использую имя создаваемого объекта. Потом я хочу обратиться к объекту по его имени, используя дерево.
node := TreeView1.selected;
...
TButton(FindComponent(treeView1.items[node.index].text)).free;
Или
Edit1.text := Button(FindComponent(treeView1.items[node.index].text)).name;
Но возникает Access violation. Почему? как избежать этой ситуации?
← →
Palladin © (2004-12-18 19:42) [1]во первых selected может быть nil, во вторых компонент может быть не найден...
> как избежать этой ситуации?
думать иногда
← →
begin...end © (2004-12-18 21:50) [2]> tazik © (18.12.04 19:13)
> как избежать этой ситуации?
Писать с проверками, чтобы не допустить случаев, описанных в [1]. Например, так:var
Node: TTreeNode;
begin
Node := TreeView.Selected;
if Assigned(Node) then
...
end.
Если находимый компонент нужно уничтожить (Free), то в этом случае, думаю, не обязательно проверять, нашёлся компонент или нет, т.к. метод Free сам делает проверку на NIL. Т.е. можно сразу написать:FindComponent(TreeView.Items[Node.Index].Text).Free
.
В случае, когда нужно обращаться к каким-нибудь свойствам или методам (НЕ методам класса) находимого компонента, то проверка необходима, например:var
Comp: TComponent;
begin
...
Comp := FindComponent(TreeView.Items[Node.Index].Text);
if Assigned(Comp) then
if Comp is TButton then
TButton(Comp).Default := True
end.
← →
tazik © (2004-12-18 22:13) [3]Огромное спасибо, гуру!!!!!
Страницы: 1 вся ветка
Текущий архив: 2005.01.02;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.056 c