Динамическое изменение структуры документа - PullRequest
0 голосов
/ 22 апреля 2010

У меня есть код

    void SomeButton_Click(object sender, EventArgs e)
    {
            if (this.Controls.Contains(Panel2))
            {
                this.Controls.Remove(Panel2);
            }
            else
            {
                this.Controls.Add(Panel2);
            }
    }

Моя проблема: код изменяет порядок элементов управления документа в моей форме Как я могу восстановить предыдущую схему документа? Какие свойства, методы я должен использовать? Или это невозможно?

Ответы [ 2 ]

0 голосов
/ 22 апреля 2010

Используйте Controls.SetChildIndex (дочерний элемент управления, int newIndex) после добавления элемента управления, чтобы расположить его в том месте, где вы хотите его разместить. Это работает, только если вы знаете точное местоположение в списке, в котором предполагается, что элемент управления находится .

В качестве альтернативы вы подумали о добавлении всех панелей и установке значения Visible = false до тех пор, пока вам не понадобится их показать. Это, конечно, работает, только если все панели предварительно определены. Если вы создаете их динамически, это не сработает.

0 голосов
/ 22 апреля 2010

Найдите индекс перед удалением и для его добавления используйте Insert с этим индексом. Вам необходимо получить к нему доступ через явную IList реализацию интерфейса .

private int panelIndex = 0;

void SomeButton_Click(object sender, EventArgs e)
{
   if (this.Controls.Contains(Panel2))
   {
      panelIndex = this.Controls.IndexOf(Panel2);
      this.Controls.Remove(Panel2);
   }
   else
   {
      IList ctrlsAsList = (IList)this.Controls;
      ctrlsAsList.Insert(panelIndex, Panel2);
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...