【发布时间】:2020-11-18 03:43:59
【问题描述】:
我在其他问题中看到过这一点,但我不明白答案。
我有一个类,它通过循环通过 SQL 阅读器来填充,然后创建这些对象的数组,然后从该对象数组创建按钮。代码如下所示:
public class MenuItem
{
public string Name { get; set; }
public double Cost { get; set; }
public string OrderListName { get; set; }
public MenuItem() {}
}
SQL 循环是这样的:
while (reader.Read())
{
MenuItem item = new MenuItem
{
Name = reader["name"].ToString(),
OrderListName = reader["orderlistname"].ToString(),
Cost = Convert.ToDouble(reader["cost"])
};
MenuItems[MenuItemCount] = item;
MenuItemCount++;
}
然后我在 for 循环中使用此代码创建按钮
{
Button menubutton = new Button
{
Text = MenuItems[k].Name + Globals.nl + MenuItems[k].Cost,
Location = new Point(point1, point2),
Size = new Size(100, 100),
Visible = true,
Tag = MenuItems[k]
};
MenuButtons[j] = menubutton;
j++;
point1 += 110;
point2 += 0;
}
在另一个 for 循环中我有:
MenuButtons[k].Click += new EventHandler(MenuButton_Click);
最后
private void MenuButton_Click(object sender, EventArgs e)
{
Button button = sender as Button;
}
所以我根据 SQL 行创建多个对象,将这些对象保存到一个对象数组中,然后为数组中的每个对象创建一个按钮。我可以正确访问按钮属性,但我不知道如何访问保存在按钮标签属性中的对象的属性。
我找到了这篇文章,并相信答案就在那里,但我无法弄清楚: How to access the object data that is stored in Tag property in a gridview?
如果您需要查看更多内容,我可以提供更多代码。 我试过了
Console.WriteLine((MenuItem)button.Tag.OrderListName)
在 MenuButton_Click 函数中
和其他变体,但它们都导致相同的问题,即它说“对象不包含 OrderListName 的定义”,当我只做 button.tag 时,它只显示“Form1+MenuItem”,当我单击按钮,以便表明该对象没有被分解和访问。
【问题讨论】:
-
试试
Console.WriteLine(((MenuItem)button.Tag).OrderListName)