0

我需要创建和添加一些与其他一些文本框具有相同属性的文本框。有没有办法将属性复制到另一个?

我正在寻找一个类似的解决方案。我知道我可以一个一个地设置变量。

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 控件!

4

3 回答 3

1

您可以使用解决方案。您可以编写一个扩展,并通过反射获得所有属性

以后请使用搜索功能。

于 2013-02-16T12:35:07.827 回答
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,它非常宝贵。

您可以在地图定义中定义许多映射,然后您的所有副本都成为一个衬里。好吧,除了定义:)

于 2013-02-16T12:29:59.443 回答
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;
    //...
}

并相应地使用它。

于 2013-02-16T12:35:51.007 回答