Динамическое удаление / добавление элементов управления в форме Windows Forms - PullRequest
3 голосов
/ 02 сентября 2010

Я хочу удалить и добавить элемент управления во время выполнения в форме Windows Forms.Проблема в том, что элемент управления должен иметь точно такой же размер, местоположение и привязки, как и у другого.

Если пользователь открывает окно и удовлетворяет определенным критериям, я хочу удалить старый элемент управления и заменить егодругим.

Итак, я попробовал это:

RichTextBox InsideText = new RichTextBox();
InsideText.Location = InsideBox.Location;
InsideText.Size = InsideBox.Size;

Controls.Remove(InsideBox);
Controls.Add(InsideText);

Но, как и ожидалось, это не сработало.InsideBox не удаляется, а InsideText не добавляется.

Что я делаю не так?Есть ли лучший подход к этому?

Ответы [ 2 ]

4 голосов
/ 02 сентября 2010

Я бы предположил, что более простым способом было бы:

  1. Добавить панель в правильном месте с правильной привязкой и т. Д.
  2. Добавить control1 внутри этой панели, установленный на полный Dock
  3. Просто удалите control1 и добавьте control2 внутри этой панели вместо этого и установите его в Dock.

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

0 голосов
/ 02 сентября 2010

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

Альтернативным подходом было бы создание обоих элементов управления в конструкторе форм в одном и том же месте и переключение их видимости только при выполнении вашего критерия.

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

Если это окажется проблемой, вы все равно можете использовать Designer для достижения другой цели: используйте описанный выше подход только для просмотра того, какой код необходим для создания «нового» элемента управления; затем удалите этот код из InitializeComponent и переместите его туда, где «старый» элемент управления должен быть заменен новым. Таким образом, вы можете быть уверены, что код для создания нового элемента управления будет правильным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...