0

他の TextBox と同じ属性を持つ TextBox を作成して追加する必要があります。属性を別の属性にコピーする方法はありますか?

私は解決策のようなものを探しています。変数を1つずつ設定できることは知っています。

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 ?

EDIT 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);

私の知る限り、組み込みの1行のソリューションはないため、拡張メソッドであるか、AutoMapperに依存しています。拡張メソッドはそのようにする必要はありません。リフレクションまたはその他の選択肢を使用できます。

私はほぼすべてのプロジェクトで AutoMapper を使用していますが、非常に貴重です。

マップ定義で多くのマッピングを定義すると、すべてのコピーが 1 つのライナーになります。まあ、定義に加えて:)

于 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 に答える