【问题标题】:Show buttons dynamically动态显示按钮
【发布时间】:2017-05-23 11:00:13
【问题描述】:

我正在制作一个应用程序(Windows 窗体),其中有不同的按钮。我的目标是根据变量的值显示不同的按钮。例如,如果变量的值为 10,它将显示前 10 个按钮。

到目前为止,我的代码是:

MySqlCommand command = new MySqlCommand("SELECT id_produto, designacao FROM 
produtos ORDER BY id_categoria ASC;", mConn);
MySqlDataAdapter dacom = new MySqlDataAdapter(command);
mConn.Open();
dacom.Fill(dtprodutos);
numprodutos = dtprodutos.Rows.Count;
for (int i = 1; i <= numprodutos; i++)
{
    bprod[i].Show();
}

我的按钮称为 bprod1、bprod2、bprod3 等。 我正在做的是从“produtos”中获取“id_produto”和“designacao”并将它们放入DataTable。 然后我用“dtprodutos”的行数创建一个变量。 最后我创建了一个循环来显示按钮。

我的问题是 Visual Studio 不允许我执行“bprod[i].Show();”因为他认为这是一个没有创建的变量。

感谢任何建议和帮助。

【问题讨论】:

  • 我和你的编译器有同样的问题:我不知道bprod 应该是什么。它是在哪里定义的?
  • 对不起,我忘了说...我的按钮被称为 bprod1、bprod2、bprod3 等,直到 25 岁。这是一个 Windows 窗体应用程序。
  • 我假设bprod 将从0 变为numprodutos - 1。所以你需要:for (int i = 0; i &lt; numprodutos; i++)(注意那里有 2 个变化。)是这样吗?
  • 如果你的第一个按钮被称为bprod1,是什么让你认为你可以像bprod[1]一样访问它?
  • WinForms Button Array的可能重复

标签: c# winforms button datatable show


【解决方案1】:

将所有按钮放在一个键入列表中。在表单的范围内声明它(例如,在表单构造函数之上)。然后,将所有按钮添加到您的列表中,在InitializeComponent 之后(或在Form_Load 中)。

List<Button> buttonList = new List<Button>();

public Form1()
{
    InitializeComponent();

    buttonList.Add(bprod1);
    buttonList.Add(bprod2);
    //etc
}

最后,当您执行查询并获取编号 (numprodutos) 时,显示列表中的许多元素(实际上是按钮)

numprodutos = dtprodutos.Rows.Count;
for (int i = 1; i <= numprodutos; i++)
{
    buttonList[i].Show();
}

或者,使用 linq

buttonList.Take(numprodutos).ToList().ForEach(btn => btn.Show());

【讨论】:

  • 谢谢!!!有用!你无法想象我在这上面花了多少时间。再次感谢!
  • 不是我……我什至不能公开投票……你的回答帮助了我!
  • @MiniKing17-Tiago,别担心,我没有指责任何人。最好,从投反对票的人那里,解释为什么投反对票......这样我下次可以学习并跳过错误或错误的做法。
  • 我认为,反对你的人,也反对我的问题。
猜你喜欢
  • 2010-10-03
  • 1970-01-01
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
  • 2014-02-28
相关资源
最近更新 更多