如何创建与另一个文本框具有相同属性的文本框?

时间:2013-02-16 12:26:10

标签: c# .net vb.net

我需要创建并添加一些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控件!

3 个答案:

答案 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;
    //...
}

并相应地使用它。