![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Delphi опять глючит
Андрей Молчанов © (2005-08-11 22:29:00)Здравствуйте!
Мне надо удалить все выделенные элементы первого уровня из TTreeView. Multiselect установлен в True. Использую следующий код:
var
Node, PrevNode: TTreeNode;
begin
Node := CheckTree.Items.GetFirstNode;
CheckTree.Items.BeginUpdate;
try
while Node <> nil do begin
if Node.Selected then begin
PrevNode := Node.getNextSibling;
Node.Delete;
Node := PrevNode;
end else
Node := Node.getNextSibling;
end;
finally
CheckTree.Items.EndUpdate;
end;
Но если выбран первый элемент дерева, то удаляютя ВСЕ элементы дерева. В чем здесь ошибка? Пожалуйста, помогите!
Андрей Молчанов (2005-08-12 12:07:00) [1]Спасибо!
Написал вот такую функцию:
procedure TfrmProperties.btnRemoveClick(Sender: TObject);
var
i: integer;
begin
CheckTree.Items.BeginUpdate;
try
for i := CheckTree.SelectionCount - 1 downto 0 do
if CheckTree.Selections[i].Level = 0 then
CheckTree.Selections[i].Delete;
finally
CheckTree.Items.EndUpdate;
end;
end;
Но, если до вызова в дереве была горизонтальная прокрутка, а после вызова в результате удаления длинного элемента, полоса исчезла, то нижняя граница дерева не перерисовывается. Без BeginUpdate и EndUpdate все прекрасно работает. Есть ли выходы, кроме как убрать BeginUpdate и EndUpdate?
GuAV (2005-08-11 23:47:00) [2]
for I := TreeView1.SelectionCount - 1 downto 0 do
if TreeView1.Selections[I].Level = 1 then
TreeView1.Selections[I].Delete;
?
KilkennyCat (2005-08-11 22:44:00) [3]а если второй, то остается только первый?