Как скопировать windows form

Мне нужно как-то скопировать форму чтоб заново не создавать. Как я могу это сделать бес конфликтов в проекте?


  • Вопрос задан

  • 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

Sample screenshot

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.

New Item

4. В появившемся окне Add New Item выбираем пункт Inherited Form, после чего нажимаем на кнопку Add.

Inherited Form

5. В открывшемся диалоговом окне Inheritance Picker выбираем компонент (форму), на основе которого мы хотим создать копию.

Inheritance Picker

В данном примере в списке содержится только один компонент Form1, поэтому можно сразу же нажать на кнопку OK. (Если данная кнопка не доступна (не активна), то это значит, что вы не выполнили пункт №2).

После нажатия на кнопку выполняется обычно наследование:

class Form2 : Form1 {}

В результате создаётся копия первой формы (Form2).

Читайте также:

  • Как выполнить команду в cmd
  • Как получить исходный код страницы с помощью класса WebBrowser?
  • Убираем выделение в первой ячейке DataGridView


Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Windows 11 aktivatsiya skachat
  • Unpack deb on windows
  • Тормозит интернет на ноутбуке windows 7
  • Как отключить nod32 в windows 10
  • Не удаляются наушники bluetooth windows 10