我正在用Button Array
制作一个小的井字游戏,我正在创建数组,我想知道是否有一种更优雅的方式来分配数组。我现在的代码是:
MovementPiece[0, 0] = button1;
MovementPiece[0, 1] = button2;
MovementPiece[0, 2] = button3;
MovementPiece[1, 0] = button4;
MovementPiece[1, 1] = button5;
MovementPiece[1, 2] = button6;
MovementPiece[2, 0] = button7;
MovementPiece[2, 1] = button8;
MovementPiece[2, 2] = button9;
我现在的问题是我的程序无法看到按钮,因为它们是在本地声明的。
public void Form1_Load(object sender, EventArgs e)
{
Button[,] MovementPiece = { { button1, button2, button3 },
{ button4, button5, button6 },
{ button7, button8, button9 } };
//Initiates the button array.
for (int Row = 0; Row <= 2; Row++)
{
for (int Column = 0; Column <= 2; Column++)
{
this.Controls.Add(MovementPiece[Row, Column]);
//Sets the handler for the buttons.
MovementPiece[Row, Column].Click += new EventHandler(MovementPiece_Click);
}
}
Public void Clear()
{
//Can not see buttons.
}
谢谢你,我是一个开始,所以放轻松:|
当然你可以这样使用数组初始化式:
Button[,] MovementPiece = { { button1, button2, button3 },
{ button4, button5, button6 },
{ button7, button8, button9 }
};
进一步阅读
- <
- 阵列教程/gh>c#规范12.6数组初始化式
正如我在我的评论中所说的,你需要在类级别声明你的数组,并在你的Form_Load事件处理程序中初始化它,这样它将对你的整个表单可见。这样应该可以工作。
public partial class Form1 : Form
{
Button[,] MovementPiece; //Declare at the class level
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
MovementPiece = new Button[,]{ { button1, button2, button3 },
{ button4, button5, button6 },
{ button7, button8, button9 }
}; //Initialized in your Form Load event
// Do your button initialization here
}
}
不要使用这样的数组,而是将所有按钮移动到一个面板中。(这是一个控件)然后你可以在面板的"控件"列表中循环。
foreach(Button button IN mypanel.Controls){
//do stuff
}
更容易使用