public static object DeepClone(object obj)
{
object objResult = null;
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, obj);
ms.Position = 0;
objResult = bf.Deserialize(ms);
}
return objResult;
}
Это - один способ сделать это с C# и.NET 2.0. Ваш объект требует, чтобы быть [Serializable()]
. Цель состоит в том, чтобы потерять все ссылки и создать новые.
(There is another way of doing this, opening the designer file and renaming the instances of TextBox to TextBoxExt but manual editing of designer files can be considered hazardous by some)
Ваш элемент управления должен автоматически появиться на панели инструментов вашего решения. Чтобы он отображался в других проектах, вы должны выполнить «Выбрать элементы панели инструментов», как говорили другие.
Если вы хотите предоставить специальные функции во время разработки, вам также потребуется предоставить некоторые дополнительные атрибуты, связанные с дизайнером, и, возможно, ваши собственный класс, производный от ControlDesigner.
Любой пользовательский элемент управления в вашем проекте должен автоматически отображаться на панели инструментов. Я обнаружил, что иногда элементы управления не отображаются, пока вы снова не закроете Visual Studio. Я предполагаю, что проблема связана с кешированием содержимого Toolbox.
Вам необходимо добавить конструктор к производному классу.
public class TextBoxExt : TextBox
{
public TextBoxExt()
{
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);
}
}