Конференция "Начинающим" » Вопрос по синтаксису Delphi
 
  • Hase © (12.03.17 13:20) [0]
    Как обнулить в цикле?

     for I := Panel1.ChildrenCount - 1 downto 0 do
       if Panel1.Children[I].ClassNameIs('TLabel') then
         (Panel1.Children[I] as TLabel) := nil;

    Ошибка - Left side cannot be assigned to

    Спасибо
  • ухты © (12.03.17 14:51) [1]
    А для чего такое делать?
  • NoUser © (12.03.17 15:16) [2]
    >>> (Panel1.Children[I] as TLabel) := nil;
    > А для чего такое делать?

    Panel1.RemoveObject(Panel1.Children[I]);

  • ухты © (12.03.17 15:28) [3]
    а автор и NoUser © это один человек? придумать вариант приенения не состовляет труда )
  • Юрий Зотов © (12.03.17 16:05) [4]
    > сабж

    Действительно, странное желание. Сделать это несложно, но лучше Вы бы объяснили задачу - может, найдем нормальный способ ее решения? А то очень напоминает вот это:
    http://www.gunsmoker.ru/2008/10/x-y-z.html
  • NoUser © (12.03.17 17:09) [5]
    xyz:
    (Panel1.Children[I] as TLabel).Visible := False;




    > Юрий Зотов ©   (12.03.17 16:05) [4]
    > > сабж
    >
    > Действительно, странное желание.


    В чём странность, - присвоить переменной nil ?

    (Вопрос по синтаксису Delphi) плюс опасение ТС,
    что это может нарушить индексацию списка (Как обнулить в цикле?)
    значит, как вариант, ему нужно 'убрать' лейбу.

    ЗЫ
    Кстати, а как в Java зачистить элементы списка?
  • Юрий Зотов © (12.03.17 17:55) [6]
    > В чём странность, - присвоить переменной nil ?

    Странность не в присвоении nil, а в том, что это зачем-то потребовалось. Потому что это не просто переменная, а элемент служебного списка. Он управляется автоматически и вмешиваться в это управление опасно, да и просто незачем.

    Допустим, мы сделали то, что хочет автор - очистили все ссылки на TLabel, лежащие на панели. Заметьте, что сам список при этом не изменился, а только обнулились некоторые его элементы.

    Теперь по каким-то причинам срабатывает код VCL: панель проходит по тому же самому списку и что-то делает с каждым его элементом.

    Что будет?
  • Юрий Зотов © (12.03.17 18:02) [7]
    > Кстати, а как в Java зачистить элементы списка?

    Clear
  • Юрий Зотов © (12.03.17 18:12) [8]
    > > Кстати, а как в Java зачистить элементы списка?>

    Или iterator.remove
  • Inovet © (12.03.17 21:17) [9]
    > [6] Юрий Зотов ©   (12.03.17 17:55)
    > Что будет?

    Ещё, если их нигде у "себя" не сохранить, то и утечка памяти будет.
  • Юрий Зотов © (12.03.17 23:51) [10]
    > Inovet ©   (12.03.17 21:17) [9]

    Nil.DoSomesing = Access Violation
  • Inovet © (12.03.17 23:52) [11]
    > [10] Юрий Зотов ©   (12.03.17 23:51)

    Это сомо собой, а ещё и утечка.
  • stas © (14.03.17 11:06) [12]
    А зачем здесь (Panel1.Children[I] as TLabel) := nil -  as TLabel , если уж решили присвоить nil элементу зачем его приводить к типу?
  • Плохиш © (14.03.17 13:01) [13]

    > stas ©   (14.03.17 11:06) [12]

    Чего не понятно?
    В примерах по Children так написано.

    Вот я не понимаю, какое отношение это всё имеет к "синтаксису Delphi"?
  • Германн © (15.03.17 02:58) [14]

    > Вот я не понимаю, какое отношение это всё имеет к "синтаксису
    > Delphi"?

    А никакого. Но конференция-то "Начинающим".
 
Конференция "Начинающим" » Вопрос по синтаксису Delphi
Есть новые Нет новых   [118639   +35][b:0][p:0.001]