【问题标题】:Concatenation for name of objects in C# [duplicate]C#中对象名称的串联[重复]
【发布时间】:2021-06-10 23:27:51
【问题描述】:

我想知道有没有办法通过为我的按钮名称创建串联来缩短我的代码。我尝试了几件事,但没有奏效。 我有 10 个按钮并命名为所有 btnCab1、btnCab2 等,我想将它们添加到按钮列表中,而不是为每个按钮使用 btn.Add(btnCab1)。这是一个例子:

 List<Button> btn = new List<Button>();
            btn.Add(btnCab1);
            btn.Add(btnCab2);
            btn.Add(btnCab3);
            btn.Add(btnCab4);
            btn.Add(btnCab5);
            btn.Add(btnCab6);
            btn.Add(btnCab7);
            btn.Add(btnCab8);
            btn.Add(btnCab9);
            btn.Add(btnCab10);
            foreach (CheckingIn c in inCabin)
            {
                int val = c.CabinNumber;
                foreach(Button b in btn)
                {
                    if(val == (btn.IndexOf(b) + 1))
                    {
                        b.BackColor = Color.Red;
                    }
                }
             }

但是,我们还要考虑到我可能有 100 个按钮。 提前谢谢!

【问题讨论】:

  • List&lt;Button&gt; btn = new List&lt;Button&gt; { btnCab1, btnCab2, btnCab3, btnCab4, btnCab5, btnCab6, btnCab7, btnCab8, btnCab9, btnCab10 }; 这些不是按钮的名称,而是包含对按钮的引用的变量的名称。
  • == "对象引用" 或 对象变量
  • 感谢您的时间 Flydog,如果我有 120 个按钮会怎样?我更多的是寻找循环的可能性,而不是手动输入。
  • 这不是你问的问题。
  • 我们只是想帮助您解决问题。根据您实际尝试执行的操作来确定正确答案。

标签: c# winforms loops


【解决方案1】:

表单的Controls 属性或按钮的公共父控件将为您提供那里存在的所有控件的集合。您可以使用string indexer 按名称访问其中一个控件。

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

// From 1 to 120
for(int i=1; i<= 120; i++)
{
    // Construct button name
    string buttonName = "btnCab" + i;

    // Try to find button with that name
    Button button = Controls[buttonName] as Button;

    // If found, add to list
    if (button != null)
    {
        btn.Add(button);
    }
}

我想补充一点,这不是一种很好的编程风格。

您不会在设计时添加这 100 个按钮。从代码中添加按钮时,您可以将它们放在一个列表中,然后使用该列表访问它们。例如,如果要在数字和按钮之间创建映射,请使用字典而不是列表。

【讨论】:

    猜你喜欢
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    相关资源
    最近更新 更多