C# 带循环的访问按钮
我想把我的9个按钮的背面涂成红色,所以我试着用一个循环的方法把它们一个接一个地涂成彩色,我还用了一个睡眠功能使它们之间有延迟。这是我的密码: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
// 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秒 }
按钮并使用此代码
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的想法。我学到了一些新东西。