喜 在Windows窗体上(不是WPF)我在flowlayout上动态创建按钮,我想为它们添加一些属性,只是为了存储其他值(int和string)以及后面使用的按钮。
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个值,因为每个按钮都有不同的颜色..
可以这样做吗?
答案 0 :(得分:8)
对于非强类型信息,您可以使用Tag属性。否则,我认为你必须继承。
答案 1 :(得分:3)
是。您可以将此类数据分配给Button.Tag
属性(继承自Control
)。此属性的输入为object
,因此您可以为其指定任何内容。
替代方案,您可以继承Button
。
答案 2 :(得分:2)
来自Button:
public class MyButton : Button
{
public string ExtraProperty {get;set;}
}
就个人而言,我认为这是糟糕的代码。真是糟糕的代码。
答案 3 :(得分: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;
答案 4 :(得分:0)
你可以:
标记属性是为此目的而设计的。
答案 5 :(得分:0)
在这种情况下,您想要做的是创建自定义控件。使用自定义控件,您可以比使用标准控件更自由。您不仅会继承正在构建自定义控件的现有控件的所有功能。您还可以向自定义控件添加更多功能和属性。
来源: Microsoft - Devloper Network。 https://msdn.microsoft.com/en-us/library/ff723977(v=expression.40).aspx