C# 带循环的访问按钮

C# 带循环的访问按钮,c#,winforms,C#,Winforms,我想把我的9个按钮的背面涂成红色,所以我试着用一个循环的方法把它们一个接一个地涂成彩色,我还用了一个睡眠功能使它们之间有延迟。这是我的密码: // Random R = new Random(); for (int i = 1; i < 9; i++) { button(i).BackColor = Color.red; thread.Sleep(2000); // 2 seconds } //Random R=new Random(); 对于(int i=1;i

我想把我的9个按钮的背面涂成红色,所以我试着用一个循环的方法把它们一个接一个地涂成彩色,我还用了一个睡眠功能使它们之间有延迟。这是我的密码:

// Random R = new Random();
for (int i = 1; i < 9; i++)
{
    button(i).BackColor = Color.red;
    thread.Sleep(2000); // 2 seconds
}
//Random R=new Random();
对于(int i=1;i<9;i++)
{
按钮(i)。背景色=颜色。红色;
thread.Sleep(2000);//2秒
}
我还使用了一个随机的方法,现在已经被禁用了,我想要它,随机地使按钮变彩色,但我不知道怎么做

我的代码也不正确,因为“按钮(i)”是不可接受的,我不知道如何使用i为按钮编号


例如:按钮1。。。按钮2。。。按钮3。。。etc

我根据您的代码示例做了一些假设,如果其中任何假设不正确,您将需要更新相应的变量

  • 我假设你的按钮名为Button1,Button2,Button3,等等

  • 我假设您使用的是WinForms,表单名为Form1

  • 我假设您有9个按钮要更新

      for (int i = 1; i < 9; i++)
      {
          ((Button) Form1.Controls.Find("Button" + i, true)[0]).BackColor = Color.Red;
          thread.Sleep(2000); // 2 seconds
      }
    
    for(int i=1;i<9;i++)
    {
    ((按钮)Form1.Controls.Find(“按钮”+i,true)[0])。BackColor=Color.Red;
    thread.Sleep(2000);//2秒
    }
    
此示例用于根据控件本身的Name属性查找每个按钮。

因此您希望这样做

收集数组中的按钮
按钮
并使用此代码

public partial class Form1 : Form
{
    static Random rng = new Random();
    public Form1()
    {
        InitializeComponent();
    }

    public async Task ColorButtons(Color color)
    {
        var buttons = new Button[] {
            button1, button2, button3,
            button4, button5, button6,
            button7, button8, button9 };

        void Swap(ref Button item1, ref Button item2)
        {
            Button temp = item2;
            item2 = item1;
            item1 = temp;
        }

        // shuffle order
        for (int i = 0; i < buttons.Length-1; i++)
        {
            for (int j = i+1; j < buttons.Length; j++)
            {
                if (rng.NextDouble()<0.5)
                {
                    Swap(ref buttons[i], ref buttons[j]);
                }
            }
        }

        // color buttons
        for (int i = 0; i < buttons.Length; i++)
        {
            buttons[i].BackColor = color;
            await Task.Delay(2000);
        }

    }

    private async void button10_Click(object sender, EventArgs e)
    {
        await ColorButtons(Color.Red);
    }

    private async void button11_Click(object sender, EventArgs e)
    {
        await ColorButtons(Color.Blue);
    }
}
公共部分类表单1:表单
{
静态随机rng=新随机();
公共表格1()
{
初始化组件();
}
公共异步任务颜色按钮(颜色)
{
变量按钮=新按钮[]{
按钮1,按钮2,按钮3,
按钮4,按钮5,按钮6,
按钮7,按钮8,按钮9};
无效交换(参考按钮项1,参考按钮项2)
{
按钮温度=项目2;
第2项=第1项;
项目1=温度;
}
//洗牌顺序
对于(int i=0;i如果(rng.NextDouble(),请发布创建按钮的位置/方式的代码。您需要使用对象名称/ID来引用它。您需要创建一个按钮数组。将数组的每个元素设置为一个命名按钮,然后您可以使用循环和数组索引器作为数组[i].无论如何,如果你有这样的问题,我真的建议你停下来,使用一些资源来介绍C语言的基本步骤。所有这些按钮都位于同一个控件(面板、groupbox等)内吗?在主线程上运行
thread.Sleep(2000)
(绘制UI的地方)这是一个非常糟糕的主意。您希望此代码在运行时异步运行以维护UI响应。@Steve是的,谢谢您的想法。数组将完成这项工作。虽然有点复杂,但我感谢ControlCollection.Find的想法。我学到了一些新东西。