char SideA = 'A';
char SideB = 'B';
int CPUPlayer = 1;
Test.Text = x.ToString();
if (difficulty == 1)
{
if (CPUPlayer == 1)
{
string targetString = "";
for (int side = 1; side <= 1; side++)
{
targetString = SideA.ToString();
Test.Text = targetString.ToString();
for (int game = 1; game < 25; game++)
{
targetString = game.ToString();
for (int tile = 1; tile < 10; tile++)
{
targetString = tile.ToString();
PictureBox target = (PictureBox)(this.Controls.Find(targetString, true))[0];
if (target.BackgroundImage == null)
{
target.BackgroundImage = Properties.Resources.smallo;
Test.Text = targetString.ToString();
}
}
}
}
}
}
因此,我尝试通过命名的PictureBox(例如:A11,A12,A13 ....等)循环播放,以使它们通过使用循环字符串连接到图片框来更改背景图像,但我一直在获取Index is out of range
从PictureBox target = (PictureBox)(this.Controls.Find(targetString, true))[0];
我不确定该如何解决。我对C#和编码通常还是很陌生,所以很高兴知道我缺少什么!
为了帮助您发现问题的改变
PictureBox target = (PictureBox)(this.Controls.Find(targetString, true))[0];
to
var found = this.Controls.Find(targetString, true);
if(found == null || found.Length < 1 ) {
throw new Exception("Picture not found")
}
之后,在throw
行中设置一个断点,并找出为什么找不到图片。
所以原来是我的.ToString();
逻辑完全错误,并且字符串作为不存在的图片框出现。这是有效的代码:
if (difficulty == 1)
{
if (CPUPlayer == 1)
{
string targetString = "";
for (int side = 1; side <= 1; side++)
{
for (int game = 1; game < 25; game++)
{
for (int tile = 1; tile < 10; tile++)
{
targetString = SideA;
targetString += game.ToString();
targetString += tile.ToString();
Test.Text = targetString.ToString();
PictureBox target = (PictureBox)(this.Controls.Find(targetString, true))[0];