私はあなたがこれをもっと複雑にしていると推測しています。私はあなたがと言うとき、ピクチャボックス(pictureBox11〜pictureBox30)を配列に追加する必要があると思います。あなたのフォームに30+ PictureBox
があることを意味し、各PictureBox
はそれぞれが "pictureBoxX"という名前のような命名規則を使用します( "X"は1,2,3 ... 30,31です)。次に、フォーム上に "PictureBoxes"の(連続する?)グループを表示して、不可視にしたいとします。私はこれが正しいことを願っています。
ピクチャボックスを表示しないようにするには、配列が必要ではないと思います。名前が "pictureBoxX"という形式の文字列と一致する場合は、単にピクチャボックスをループし、見えなくするだけです。私はIndexsAreValid
メソッドを使用して、開始インデックスと終了インデックスを検証しました。また、このコードの下の配列実装のコードでも使用されます。あなたは、その後、以下のコードは動作するはず返さPictureBox
配列を持たなければならない場合
は、アレイ
private void SetPictureBoxesInvisible(int start, int end) {
int size = -1;
string targetString = "";
if (IndexsAreValid(start, end, out size)) {
for (int i = start; i < end + 1; i++) {
try {
targetString = "pictureBox" + i;
PictureBox target = (PictureBox)Controls.Find(targetString, true)[0];
if (target != null) {
target.Visible = false;
}
}
catch (IndexOutOfRangeException e) {
return;
}
}
}
}
なしPictureBoxesが見えないことを確認します。
まず、PictureBox
の配列を取得するには、配列を格納する必要があります。しかし、まず、あなたはそれをどれだけ大きくするかを知る必要があります。投稿されたコードから、画像ボックス11〜30を取得して配列に入れたいと思うようです。したがって、これらの数値からサイズを得ることができます。つまり、30-11 = 19 +1 = 20です。単に配列を作成し、すべての画像ボックスをループして、pictureBox11-pictureBox30を取得します。終了したら、この配列を使ってこれらの `PictureBoxes 'を見えなくすることができます。
tryParse
と同様のメソッドIsValidPic
を作成して、指定されたインデックス(1,2,3..30)が有効かどうかを検証しました。範囲外の場合は、その値を無視するだけです。これにより、必要な画像ボックスが連続していない場合に個々の画像ボックスをつかむことができます。メソッドをテストするためにいくつかのボタンを使用しました。
これが役に立ちます。
private PictureBox[] GetPictureBoxes(int start, int end) {
int size = - 1;
if (IndexsAreValid(start, end, out size)) {
PictureBox curPic = null;
PictureBox[] allPics = new PictureBox[size];
int index = 0;
for (int i = start; i <= end; i++) {
if (IsValidPic(i, out curPic)) {
allPics[index] = curPic;
index++;
}
}
return allPics;
}
else {
return new PictureBox[0];
}
}
private Boolean IndexsAreValid(int start, int end, out int size) {
if (start < 1 || end < 1) {
size = -1;
return false;
}
if (start > end) {
size = -1;
return false;
}
size = end - start + 1;
return true;
}
private Boolean IsValidPic(int index, out PictureBox picture) {
string targetName = "pictureBox" + index;
try {
PictureBox target = (PictureBox)Controls.Find(targetName, true)[0];
if (target != null) {
picture = target;
return true;
}
picture = null;
return false;
}
catch (IndexOutOfRangeException e) {
picture = null;
return false;
}
}
private void ResetAll() {
foreach (PictureBox pb in this.Controls.OfType<PictureBox>()) {
pb.Visible = true;
}
}
private void button1_Click(object sender, EventArgs e) {
TurnInvisible(2, 3);
}
private void button3_Click(object sender, EventArgs e) {
TurnInvisible(11, 30);
}
private void button4_Click(object sender, EventArgs e) {
TurnInvisible(1,7);
}
private void TurnInvisible(int start, int end) {
PictureBox[] pictureBoxesToChange = GetPictureBoxes(start, end);
foreach (PictureBox pb in pictureBoxesToChange) {
if (pb != null)
pb.Visible = false;
}
}
private void button2_Click(object sender, EventArgs e) {
ResetAll();
}
どのような質問ですか? – jonathana
編集しました。質問 - アレイにピクチャボックスを追加するサイクルが私のものではないのはなぜですか? – Raiviz
'Coins'のデータ型は何ですか? – jonathana