Как добавить один и тот же объект в разные панели в c #?

#c# #winforms #oop #label #flowlayout

#c# #winforms #ооп #метка #flowlayout

Вопрос:

Я новичок в c #, мне было интересно, почему, если я пытаюсь добавить один и тот же объект в другую панель FlowLayoutPanel, он отображается только на последней панели.

Пример:

 Label noElementsTitleLabel = LabelFactory.getLabel("No elements");

private void loadLabelsInPanel(FlowLayoutPanel panel, Label title, Label[] labelArray)
{
    panel.Controls.Add(title);
    if (labelArray.Length == 0)
    {
        panel.Controls.Add(noElementsTitleLabel);
        return;
    }            
    panel.Controls.AddRange(labelArray);
}
 

Если я вызываю loadLabelsInPanel три раза, предоставляя три разные панели макета, и labelArray всегда пусто, я вижу noElementsTitleLabel только на третьей панели

Комментарии:

1. noElementsTitleLabel это элемент управления, у него может быть только один родительский элемент. Вероятно, с этим было бы по-другому panel.Controls.Add(LabelFactory.getLabel("No elements")); . Это предполагает LabelFactory , что каждый раз возвращается новый объект.

2. Элемент управления имеет четыре свойства 1) Слева 2) Сверху 3) Ширина 4) Высота Вы не устанавливаете эти свойства, поэтому они используются по умолчанию, и две панели расположены в одном и том же месте.

3. Хорошо, спасибо @Jimi, я забыл, что Label был элементом управления!