我希望是一个简单的C#问题!向按钮添加其他属性

我希望是一个简单的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");

嗨 在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个值,我想与每个按钮一起存储,因为每个按钮都不同


可以这样做吗?

对于非强类型信息,可以使用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
属性的强类型方法,在某些情况下非常有用。