2015-06-23 5 views
0

У меня есть приложение для iOS/android, разработанное с помощью Delphi XE8 FMX.Добавленные элементы дерева не будут отображаться при расширении древовидного изображения

В приложении у меня есть дерево с элементами дерева. Когда я добавляю элемент дерева к узлу, когда тот же самый родительский узел расширяется, мне нужно либо: а) свернуть и развернуть родительский узел из самого приложения или б) сделать это программно (см. Ниже), чтобы получить элемент дерева показать прямо сейчас. Я попробовал называть «repaint», но это не сработало. Улучшена ли работа? Иногда при вызове collapseall, expandall, как я делаю ниже, тогда некоторые из узлов дерева становятся невосприимчивыми (неизбираемыми) до тех пор, пока я не выберу самый верхний узел дерева.

procedure TnewForm.AddTreeItemClick(Sender: TObject); 
var 
    t:TTreeViewItem; 
begin 
    t:=TTreeViewItem.Create(nil); 
    t.Text:=NewTreeItemEdit.Text; 
    if TreeView.Selected<>nil then 
    begin 
    t.Parent:=TreeView.Selected 
    end else 
    t.Parent:=TreeView; 
    //Treeview.Repaint; 
    treeview.CollapseAll; 
    treeview.ExpandAll; 
    NewTreeItemEdit.Text:=''; 
end; 

Как я могу сделать динамически добавленные элементы дерева сразу же, не сворачивая/расширяя древовидную структуру?

+0

добавление начального обновления, окончательное обновление, связанное со всем этим, устраняет проблему, не отвечающую требованиям. Тем не менее, есть ли более подходящий способ сделать это? – ThisGuy

ответ

1

Вы можете попробовать это.

procedure TnewForm.AddTreeItemClick(Sender: TObject); 
var 
    t:TTreeViewItem; 
begin 
    t:=TTreeViewItem.Create(nil); 
    t.Text:=NewTreeItemEdit.Text; 
    if TreeView.Selected<>nil then 
    begin 
    t.Parent:=TreeView.Selected 
    end else 
    t.Parent:=TreeView; 
    //Treeview.Repaint; 
    treeview.Selected := t; 
    NewTreeItemEdit.Text:=''; 
end; 
1

Dsm's solution работает, но изменяется выбор TreeView. Если вы хотите, чтобы выбор остаться unchanges, но вместо этого только что добавленный элемент мгновенно виден, а затем расширить его родителя:

procedure TForm1.AddTreeItemClick(Sender: TObject); 
var 
    T :TTreeViewItem; 
begin 
    T := TTreeViewItem.Create(nil); 
    T.Text := NewTreeItemEdit.Text; 
    if TreeView.Selected <> nil then 
    begin 
    T.Parent := TreeView.Selected; 
    TreeView.Selected.IsExpanded := True; 
    end else 
    T.Parent := TreeView; 
    NewTreeItemEdit.Text := ''; 
end; 
+1

Да, это зависит от того, что вы хотите сделать. Иногда вы хотите, чтобы выбор оставался таким, какой он есть, и иногда вы хотите, чтобы он изменился на вновь добавленный элемент. – Dsm

+0

ну, я еще не пробовал - покажу коротко - но я не думаю, что проблема в том, что мои узлы нуждаются в расширении, когда я их добавлю. Если узел уже имеет вспомогательные узлы и уже развернут, например, если я затем добавлю еще один подузел, который, по-видимому, сразу покажет, нет. – ThisGuy

+0

Это не относится к Windows. Я не могу протестировать его в iOS или Android. – NGLN

1

Аналогичная проблема с Windows/X Е8. Обходной, что сделал это для меня:

if Assigned(TV.Selected) then 
    begin 
     N := TTreeviewItem.Create(Self); 
     N.Text := 'Another child'; 
     N.Parent := TV.Selected; 
     N.IsExpanded := TRUE; // This seems to do the trick 
    end; 

Надеемся, что это привлечет внимание в следующих выпусках.