2013-02-16 70 views
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 ? 

編輯文本框可能是任何其他.NET控件!

回答

1

您可以使用this解決方案。你可以寫一個延伸,並通過反射得到所有propertys

請使用未來的搜索功能。

+0

這就是我正在尋找的 – 2013-02-16 12:43:06

+0

@Mahdi,這是AutoMapper的工作原理。我不會走自己的路,我會利用現有的解決方案。 – CubanX 2013-02-16 12:49:41

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

A FAIK,沒有內置的單行解決方案,因此它可以是擴展方法,也可以對AutoMapper進行依賴。擴展方法不必這樣做,您可以在那裏使用反射或其他選擇。

我在幾乎所有的項目中都使用AutoMapper,它非常寶貴。

您可以在地圖定義中定義多個映射,然後所有副本都將成爲一個內襯。那麼,除了定義:)

+0

我正在尋找一個像解決方案。我知道我可以逐個設置變量。 – 2013-02-16 12:30:42

+0

如果您使用擴展方法,則它是一個使用中的單線程。我將在答案中發佈AutoMapper示例... – CubanX 2013-02-16 12:36:08

+0

TextBox可能是任何其他.NET控件,擴展方法不是一行代碼。 – 2013-02-16 12:37:54

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

,並相應地使用它。

相關問題