2010-10-27 50 views
3

嗨 在窗體窗體上(不是WPF)我在flowlayout上動態地創建按鈕,我想向它們添加一些屬性,只是爲了存儲其他值(int和string) 。一個簡單的C#問題,我希望!向窗口添加其他屬性

  Button bn = new Button(); 
      bn.Text = "mybutton"; 
      bn.Name = "mybutton"; 
      toolTip1.SetToolTip(bn, "some tip"); 
      bn.Location = new Point(200, 200); 
      bn.Size = new Size(110, 30); 
      bn.BackColor = SystemColors.Control; 
      bn.Show(); 
      flowLayoutPanel1.Controls.Add(bn); 

我有大約6個值,我想每個按鈕存儲,因爲它是每個按鈕的不同..

可以這樣做?

回答

2

派生從按鈕:

public class MyButton : Button 
{ 
    public string ExtraProperty {get;set;} 
} 

就個人而言,我認爲這是錯誤代碼。真是糟糕的代碼。

+0

爲什麼? MyButton的名字(如果是的話,我同意你的說法)?繼承vs組合(當你不控制基類時,這是很難的)?這將是很好的,爲什麼你提供這樣的錯誤代碼... – 2010-10-27 18:31:45

+0

a)這是一個例子b)你不能在這裏使用組合,因爲形式不會工作。因爲它不完全清楚OP試圖實現什麼,所以我沒有寫關於分裂GUI和邏輯的文章。這種方式只是一種使用Control.Tag屬性的強類型方法,在某些情況下可能很有用。 – Femaref 2010-10-27 19:28:45

8

對於非強類型信息,可以使用Tag屬性。否則,我認爲你不得不繼承子類。

3

是的。您可以將這樣的數據分配給Button.Tag屬性(繼承自Control)。這個屬性被輸入爲object,所以你可以指定任何你想要的。

或者,您可以繼承Button

1

與所有WinForms控件一樣,Button也具有Tag屬性,該屬性可用於存儲任意對象。

public struct MyButtonData { 
    public int myInt; 
    public string myString; 
} 

... 

bn.Tag = new MyButtonData() {myInt = 3, myString = "Hello World"}; 

... 

var data = (MyButtonData)bn.Tag; 
0

您可以:

  • 創建一個控制,從鍵產生,並添加附加屬性。
  • 創建一個類來封裝要分配給每個按鈕的數據,實例化該類,然後將控件的「標記」屬性指向實例化對象。

標記財產是專爲此目的而設計的。