我希望是一个简单的C#问题!向按钮添加其他属性
嗨 在windows窗体(不是WPF)上,我在flowlayout上动态创建按钮,我想向它们添加一些属性,以便使用按钮存储其他值(int和string),以供以后使用我希望是一个简单的C#问题!向按钮添加其他属性,c#,winforms,.net-4.0,C#,Winforms,.net 4.0,嗨 在windows窗体(不是WPF)上,我在flowlayout上动态创建按钮,我想向它们添加一些属性,以便使用按钮存储其他值(int和string),以供以后使用 Button bn = new Button(); bn.Text = "mybutton"; bn.Name = "mybutton"; toolTip1.SetToolTip(bn, "some tip");
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个值,我想与每个按钮一起存储,因为每个按钮都不同
可以这样做吗?对于非强类型信息,可以使用Tag属性。否则,我认为您必须创建子类。是的。您可以将这样的数据指定给属性(继承自)。此属性被键入为
对象
,因此您可以为其分配任何需要的内容
或者,您可以从
按钮继承与所有WinForms控件一样,按钮也有一个标记
属性,可用于存储任意对象
public struct MyButtonData {
public int myInt;
public string myString;
}
...
bn.Tag = new MyButtonData() {myInt = 3, myString = "Hello World"};
...
var data = (MyButtonData)bn.Tag;
从按钮派生:
public class MyButton : Button
{
public string ExtraProperty {get;set;}
}
我个人认为这是一个糟糕的代码。非常糟糕的代码。您可以:
- 创建从按钮派生的控件,并添加其他属性
- 创建一个类来封装要分配给each按钮的数据,实例化该类,然后将控件的“Tag”属性指向实例化的对象
Tag属性正是为此目的而设计的。在本例中,您希望执行的操作是创建自定义控件。使用自定义控件比使用标准控件具有更多的自由度。您不仅可以从正在构建自定义控件的现有控件继承所有功能。您还将有机会向自定义控件添加更多功能和属性
来源:微软-开发运营商网络。
为什么?MyButton
名称(如果是,我同意你的看法)?继承与组合(当您不控制基类时,这有点困难)?这将是一个很好的解释,为什么你要提供如此糟糕的代码……a)这是一个例子b)你也不能在这里使用组合,因为表单在那时不起作用。由于不完全清楚OP想要实现什么,我没有写关于拆分GUI和逻辑的文章。这种方法只是采用Control.Tag
属性的强类型方法,在某些情况下非常有用。