すでに存在するピクチャボックスを取り出して配列に追加すると、Visual Studioではこれで問題ありません。たとえば、trees[64].BringToFront();
と言うことができます。そして、その絵文字はすべて前面に表示されます。C#オブジェクト参照がオブジェクトのインスタンスに設定されていない - ループ内でピクチャボックス配列を使用する場合のみ
しかし、配列内のすべてのピクチャボックスを最初から最後まで前面に持っていくためにループを使用すると、エラーが発生します。私がどこで始まり、終わるかは関係ありません。ループの仕方に関係なく、私には例外が与えられます。
しかし、intの代わりに数字を使用すると、ループ内にあっても問題ありません。私は1つの任意の数で開始と終了をループするように指示することもできますが、例外がスローされますが、ピクチャボックス(trees[]
)の配列に全く同じ番号を書き込むと問題ありません。
私がしたいことは、ループを使ってすべてのピクチャボックスを前面に表示することだけです。これは不可能なことですか? try/catch
文はそのように見えるなぜあなたは迷っている場合にはpictureboxesは11×11のグリッドに
(TA0, TB0, TC0 ... TA1, TB1, TC1 ... TA2, TB2, TC2 ... . . . . . . . . . )
public partial class Form1 : Form
{
int[] Cell = new int[121];
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Generate();
}
private void Generate()
{
var trees = new PictureBox[121];
Random rnd = new Random();
int n;
for (int i = 0; i < 10; i++)
{
try
{
trees[i] = (PictureBox)Controls.Find("TA" + (i).ToString(), true)[0];
trees[i + 11] = (PictureBox)Controls.Find("TB" + (i + 1).ToString(), true)[0];
trees[i + 22] = (PictureBox)Controls.Find("TC" + (i + 1).ToString(), true)[0];
trees[i + 33] = (PictureBox)Controls.Find("TD" + (i + 1).ToString(), true)[0];
trees[i + 44] = (PictureBox)Controls.Find("TE" + (i + 1).ToString(), true)[0];
trees[i + 55] = (PictureBox)Controls.Find("TF" + (i + 1).ToString(), true)[0];
trees[i + 66] = (PictureBox)Controls.Find("TG" + (i + 1).ToString(), true)[0];
trees[i + 77] = (PictureBox)Controls.Find("TH" + (i + 1).ToString(), true)[0];
trees[i + 88] = (PictureBox)Controls.Find("TI" + (i + 1).ToString(), true)[0];
trees[i + 99] = (PictureBox)Controls.Find("TJ" + (i + 1).ToString(), true)[0];
trees[i + 110] = (PictureBox)Controls.Find("TK" + (i + 1).ToString(), true)[0];
}
catch (IndexOutOfRangeException)
{
MessageBox.Show("pictureBox does not exist!");
}
}
for(int idx = 0; idx <= 120; idx++)
{
n = rnd.Next(1, 3);
Cell[idx] = n;
trees[idx].BringToFront();
}
}
}
エラーが発生した行はありますか。 – Steve
最初のループは 'for(int i = 0; i <11; i ++)'でなければなりません。 – Ripple