Delphi не может удалить детей из VertScrollBox - PullRequest
0 голосов
/ 18 мая 2018

У меня есть TVertScrollBox элемент управления с TRectangle внутри.Когда я нажимаю кнопку, я беру этот прямоугольник и копирую его в поле прокрутки 20 раз.

// var Rectangle: TRectangle;
VertScrollBox.BeginUpdate;
for i := 0 to 19 do
  begin

    //Copy the rectangle that is already inside the ScrollBox
    Rectangle:= TRectangle(RectangleTemplate.Clone(VertScrollBox));
    VertScrollBox.AddObject(Rectangle);

  end;
VertScrollBox.EndUpdate;

Таким образом, ситуация выглядит следующим образом:

enter image description here


Проблема

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

enter image description here

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

for j := VertScrollBox.ChildrenCount-1 downto 1 do
  if (VertScrollBox.Children[j] is TRectangle) then
    VertScrollBox.RemoveObject(VertScrollBox.Children[j]);

Этот код не работает, потому что прямоугольники не удаляются.Это потому, что я не установил Parent для прямоугольника при его добавлении?

Я также пробовал что-то вроде RemoveObject(TRectangleVertScrollBox.Children[j])), но все равно ничего.

1 Ответ

0 голосов
/ 18 мая 2018

VertScrollBox.AddObject метод добавляет элементы управления во внутреннее поле прокрутки Content control.Вы должны перебрать Content потомков, чтобы удалить добавленные элементы управления.

for j := VertScrollBox.Content.ChildrenCount-1 downto 1 do
  if (VertScrollBox.Content.Children[j] is TRectangle) then
    VertScrollBox.Content.RemoveObject(VertScrollBox.Content.Children[j]);

Классы объектов и особые экземпляры объектов, которые не добавляются в Content, но для самого поля прокрутки:

  • FContent
  • ResourceLink
  • Экземпляры эффекта
  • Экземпляры TAnimation
  • FVScrollInfo [0] .Scroll
  • FVScrollInfo [1] .Scroll
  • FHScrollInfo [0] .Scroll
  • FHScrollInfo [1] .Scroll
  • FSizeGrip
...