Мне нужно как-то скопировать форму чтоб заново не создавать. Как я могу это сделать бес конфликтов в проекте?
-
Вопрос задан
-
4974 просмотра
3
комментария
Подписаться
2
Простой
3
комментария
Пригласить эксперта
Ответы на вопрос 1
Здравствуйте!
Зайдите в обозреватель решений, нажмите на треугольничек рядом с именем вашей формы и выберите файл: <имя-формы>.Designer.cs
, скопируйте его содержимое.
Создайте новую форму, откройте для нею этот файл и жмите Ctrl + A, Ctrl + V
Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ
Похожие вопросы
-
Показать ещё
Загружается…
Минуточку внимания
Реклама
Чем асинхронная логика (схемотехника) лучше тактируемой, как я думаю, что помимо энергоэффективности — ещё и безопасность.
Hrethgir 14.05.2025
Помимо огромного плюса в энергоэффективности, асинхронная логика — тотальный контроль над каждым совершённым тактом, а значит — безусловная безопасность, где безконтрольно не совершится ни одного. . .
Многопоточные приложения на C++
bytestream 14.05.2025
C++ всегда был языком, тесно работающим с железом, и потому особеннно эффективным для многопоточного программирования. Стандарт C++11 произвёл революцию, добавив в язык нативную поддержку потоков,. . .
Stack, Queue и Hashtable в C#
UnmanagedCoder 14.05.2025
Каждый опытный разработчик наверняка сталкивался с ситуацией, когда невинный на первый взгляд List<T> превращался в узкое горлышко всего приложения. Причина проста: универсальность – это прекрасно,. . .
Как использовать OAuth2 со Spring Security в Java
Javaican 14.05.2025
Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . .
Анализ текста на Python с NLTK и Spacy
AI_Generated 14.05.2025
NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и. . .
Реализация DI в PHP
Jason-Webb 13.05.2025
Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .
Обработка изображений в реальном времени на C# с OpenCV
stackOverflow 13.05.2025
Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого. . .
POCO, ACE, Loki и другие продвинутые C++ библиотеки
NullReferenced 13.05.2025
В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .
Паттерны проектирования GoF на C#
UnmanagedCoder 13.05.2025
Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .
Создаем CLI приложение на Python с Prompt Toolkit
py-thonny 13.05.2025
Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .
Clone/Serialize/Copy & Paste a Windows Forms control through serializing its properties.
- Download source and executable — 80.2 Kb
Introduction
In the .NET environment, the System.Windows.Forms.Control
class and all the concrete controls derived from it don’t have clone methods and they are not serializable. So there is no immediate way to clone, serialize, or copy & paste them.
This article presents an all-purpose approach to let you clone, serialize, or copy & paste a Windows Forms control through serializing its properties.
Background
Recently, I was doing some UI programming with C#. One problem I met is that I can not clone or copy & paste a Windows Forms control directly because the System.Windows.Forms.Control
class is neither serializable nor does it have a Clone
method. After searching the internet and reading James and Nish’s articles, Clipboard Handling with .NET (Part I, Part II), I came up with my own approach to copy & paste a Windows Forms control by serializing its properties.
Using the code
Using the code in the sample application to clone/serialize/copy & paste a Windows Forms control is very simple. The static methods to do serialization and deserialization are wrapped in the ControlFactory
class.
Copy & Paste a control
... ControlFactory.CopyCtrl2ClipBoard(this.comboBox1); ... Control ctrl = ControlFactory.GetCtrlFromClipBoard(); this.Controls.Add(ctrl); ctrl.Text = "created by copy&paste"; ctrl.SetBounds(ctrl.Bounds.X,ctrl.Bounds.Y+100, ctrl.Bounds.Width,ctrl.Bounds.Height); ctrl.Show();
Clone a control
... Control ctrl = ControlFactory.CloneCtrl(this.comboBox1); this.Controls.Add(ctrl); ctrl.Text = "created by clone"; ctrl.SetBounds(ctrl.Bounds.X,ctrl.Bounds.Y+350, ctrl.Bounds.Width,ctrl.Bounds.Height); ctrl.Show();
Implementation Details
When you clone/paste a control, the ControlFactory
creates a new control through reflection, with the class name and namespace (partialName
) passed to it.
... Assembly controlAsm = Assembly.LoadWithPartialName(partialName); Type controlType = controlAsm.GetType(partialName + "." + ctrlName); ctrl = (Control)Activator.CreateInstance(controlType); ... return ctrl;
If the new control is successfully created, ControlFactory
then sets the properties of the new control with the property values it had retrieved from the original control.
public static void SetControlProperties(Control ctrl,Hashtable propertyList) { PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(ctrl); foreach (PropertyDescriptor myProperty in properties) { if(propertyList.Contains(myProperty.Name)) { Object obj = propertyList[myProperty.Name]; myProperty.SetValue(ctrl,obj); } } }
In .NET clipboard programming, to create a custom format that uses a class, you must make the class serializable, that is it needs to have the Serializable
attribute applied to it. CBFormCtrl
is such a custom data format, it also uses a hash table to store the serializable properties.
[Serializable()] public class CBFormCtrl { private static DataFormats.Format format; private string ctrlName; private string partialName; private Hashtable propertyList = new Hashtable(); ... }
Points of Interest
I’ve tested this approach with almost all the Windows Forms controls, it works fine with most of them. Unfortunately, when I copy & paste a ListView
/ListBox
/CheckedListBox
or a TreeView
, their item data will be lost, that is because the “Items
” property of a ListView
/ListBox
/CheckedListBox
and the “Node
” property of a TreeView
are not serializable.
To completely copy & paste these controls with their item data, you need to do some extra handling of the “Items
” property or the “Node
” property. As a reference, you can look at Tom John’s article to see how to fully serialize a TreeView
control.
Перейти к содержимому
Сегодня хочу показать, как можно быстро создать копию формы с помощью графического интерфейса программы Visual Studio.
1. Создадим новый проект типа Windows Forms Application.
2. Выполним команду: Build -> Build Solution.
3. Переходим в окно Solution Explorer и нажимаем правую кнопку мышки на имени текущего проекта. После чего в появившемся контекстном меню выбираем пункт Add и следом в дополнительном меню выбираем пункт New Item.
4. В появившемся окне Add New Item выбираем пункт Inherited Form, после чего нажимаем на кнопку Add.
5. В открывшемся диалоговом окне Inheritance Picker выбираем компонент (форму), на основе которого мы хотим создать копию.
В данном примере в списке содержится только один компонент Form1, поэтому можно сразу же нажать на кнопку OK. (Если данная кнопка не доступна (не активна), то это значит, что вы не выполнили пункт №2).
После нажатия на кнопку выполняется обычно наследование:
class Form2 : Form1 {}
В результате создаётся копия первой формы (Form2).
Читайте также:
- Как выполнить команду в cmd
- Как получить исходный код страницы с помощью класса WebBrowser?
- Убираем выделение в первой ячейке DataGridView