Задать вопрос
@Alexis17842

Как восстановить в окне конструктора случайно удаленный контрол в winforms?

Подскажите, пожалуйста, как восстановить на главной форме в окне конструктора случайно удаленный элемент управления (datagridview)?

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

IDE - VS 2013 Express, язык - c#
  • Вопрос задан
  • 3491 просмотр
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
GavriKos
@GavriKos
Самое надежное - откатиться на предыдущий коммит, в котором был этот контрол.
Ответ написан
Комментировать
AlekseyNemiro
@AlekseyNemiro
full-stack developer
С Windows Forms нужно быть готовым к разного рода фокусам со стороны Visual Studio.
Даже при использовании систем контроля версий, порой приходится повозиться с подлянками в виде пропавших картинок или дочерних элементов в каком-нибудь меню или ToolStrip. Многие подобные случаи можно поправить руками, путем ручного исправления файлов Designer, но не всегда. Чем сложнее форма, тем выше риск того, что дизайнер студии что-нибудь сломает; всегда нужно быть к этому готовым.

1. Раз появился такой вопрос, то видимо Ctrl + Z точно уже не поможет. Это первое, что нужно было сделать.

2. Если форма не была сохранения, то для отката изменений можно было бы её просто закрыть без сохранения. Но опять же, это нужно было делать сразу, при возникновении проблемы и если обычный откат назад (Ctrl + Z) не помог.

3. Если не используется система контроля версий, то нужно регулярно делать резервные копии исходного кода. Использование системам контроля версий будет удобней. Но даже при использовании систем контроля версий, следует регулярно делать резервные копии, и резервные копии резервных копий.

4. Если есть сборка нужного состояния программы (или приблизительно этому состоянию) и над пропавшим интерфейсом велась работа в поте лица, без перерывов на обед и сон, и все очень сложно и не хочется повторять этот героический поступок, то можно декомпилирвать предыдущую сборку и выдернуть код описания интерфейса из нее. Например, при помощи dotPeek.

Описание элементов формы, по умолчанию, находятся в файлах Designer. Например, элементы Form1 можно найти в файле Form1.Designer.cs. Иногда у элементов могут просто потеряться ссылки на родителей. Случай случайного удаления элемента и отката назад (Ctrl + Z) как раз-таки может привести к подобному поведению. Код в файле Designer обычно остается и ссылки можно поправить руками. Как правило, речь идет о добавлении строчек кода вида: this.родительскийЭлемент.Controls.Add(this.дочернийЭлемент). Главное понимать, что от чего отвалилось и что к чему нужно привязать. Если не понимать, то можно сделать хуже :-) (не стоит забывать про создание резервных копий). После внесения изменений в код дизайнера, следует переоткрыть конструктор форм (в идеале, перед внесением изменений в *.Designer.cs, конструктор форм (визуальный редактор форм) лучше закрыть).

Если элемент удален полностью и использовать восстановление из предыдущей сборки, то в декомпилированном коде нужно будет найти класс формы, а в нем метод InitializeComponent. У DataGridView, каждая колонка и строка (при наличии) будут являться отдельными элементами, нужно найти и перенести весь код описания этих элементов. Как правило, для каждого отдельного элемента, установка значений свойствам в коде идет последовательно. Дочерние элементы могут идти в разброс, по именам элементов можно более ли менее понять, что к чему (если стандартные имена у элементов менялись на собственные, то проблем с поиском возникнуть не должно).
Ответ написан
Комментировать
Если есть система контроля версий, то как писали - откатиться на предыдущий коммит.
Если нет, то только ручками восстанавливать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы