我需要创建并添加一些TextBox,它们具有与其他TextBox相同的属性。 有没有办法将属性复制到另一个?
我正在寻找一个像解决方案一样的人。我知道我可以逐个设置变量。
TextBox Old = new TextBox() {
Size = new System.Drawing.Size(25,25),
Location = new Point(a.row*25, a.col*25),
Multiline = true
};
TextBox New = new TextBox(); //which has same location,size as old one ?
编辑 TextBox可能是任何其他.NET控件!
答案 0 :(得分:1)
您可以使用this解决方案。您可以编写一个扩展名,并通过Reflection all properties
获取将来请使用搜索功能。
答案 1 :(得分:0)
可能最简单的方法就是:
TextBox New = new TextBox {
Size = Old.Size,
Location = Old.Location,
Multiline = Old.Multiline
};
如果你需要做很多事情,你可以写一个做同样事情的扩展方法:
public static class TextBoxExtensions {
public static TextBox Copy(this TextBox textBoxToCopy) {
var copiedTextBox = new TextBox {
copiedTextBox = textBoxToCopy.Size,
copiedTextBox = textBoxToCopy.Location,
copiedTextBox = textBoxToCopy.Multiline
};
}
}
用法:
var copyOfOld = Old.Copy();
如果要添加更多属性进行复制,我会考虑使用AutoMapper并在TextBox和TextBox之间定义一个映射。如果您对该路径感兴趣,请告诉我,我会发布样本。
它会把它变成一个单行,但你需要依赖AutoMapper,但它可以在NuGet上使用:http://nuget.org/packages/AutoMapper/2.2.0
首先,依赖AutoMapper。
在项目的某处定义映射:
Mapper.CreateMap<TextBox, TextBox>();
<强>用法:强>
var newTextBox = Mapper.Map<TextBox, TextBox>(Old);
或者,如果您已经有一个实例,您想将其填入:
Mapper.Map(Old, newTextBox);
AFAIK,没有内置的,一行解决方案,因此它既可以是扩展方法,也可以依赖AutoMapper。扩展方法不必这样做,你可以在那里使用反射或其他选择。
我在几乎所有项目中都使用AutoMapper,这非常宝贵。
您可以在地图定义中定义多个映射,然后所有副本都成为一个内容。好吧,除了定义:)
答案 2 :(得分:0)
创建初始化方法:
private void InitializeTextBox(TextBox textBox)
{
textBox.Size = new System.Drawing.Size(25, 25);
textBox.Location = new Point(a.row * 25, a.col * 25);
textBox.Multiline = true;
}
并像这样使用:
TextBox t1 = new TextBox(), t2 = new TextBox();
InitializeTextBox(t1);
InitializeTextBox(t2);
或复印机方法:
private void CopyTextBoxProps(TextBox source, TextBox dest)
{
dest.Size = source.Size;
dest.Location = source.Location;
dest.Multiline = source.Multiline;
//...
}
并相应地使用它。