PictureBoxをデザインフォームで宣言せずに、ソース内部で多重配列を使って宣言しデザインフォームで表示されるようにしたい。

前提

C#でテトリスみたいなシステムを作っています。
テトリミノを表示する機能を実装中に以下の実現したいことが発生しました。
このようなソースがあるのですが、理解できなかったです。

namespace Tetris { internal class DataClass { internal class Storage : IEquatable<Storage> { internal bool Equals(Storage other) { throw new NotImplementedException(); } internal int PartId { get; set; } } internal List<Storage> piece = new List<Storage>(); } }

実現したいこと

発生している問題・エラーメッセージ

ありません。

該当のソースコード

C#

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms; namespace Tetris { internal partial class Form1 : Form { //定数 private const byte length = 26;//フィールド用。縦の長さ private const byte width = 12;//フィールド用。横の長さ //private const byte LimitValue = 21;//フィールド用。ゲーム終了のライン //private const byte Wall = 0;//ゲーム内での壁 //private const byte Place = 1;//ゲーム内でのコマの置ける場所 //private const byte Prohibited = 2;//ゲーム内で置けないエリア internal Form1() { InitializeComponent(); } //DataClassをnewして呼び出して使えるようにする //private static DataClass dataClass = new DataClass(); /*↑この中に画像データを書いたソースがあります。 *このようなソースで書いております。 * internal readonly Image Tetrimino = Image.FromFile(Directory.GetCurrentDirectory() + "\\Tetrimino.png"); */ //フォームのロード時に呼ばれるメソッド private void Form1_Load(object sender, EventArgs e) { Initialization(sender, e); } //初期化用メソッド private void Initialization(object sender, EventArgs e) { dataClass.GameBoardFormat(); //PictureBoxを初期盤面に設定する for (int i = 0; i < length; i++) { for (int j = 0; j < width; j++) { if (i == 0) { switch (j) { case 0: pictureBox1.Image = dataClass.Tetrimino; break; case 1: pictureBox2.Image = dataClass.gameoverLine_image; break; case 2: pictureBox3.Image = dataClass.gameoverLine_image; break; case 3: pictureBox4.Image = dataClass.gameoverLine_image; break; case 4: pictureBox5.Image = dataClass.gameoverLine_image; break; case 5: pictureBox6.Image = dataClass.gameoverLine_image; break; case 6: pictureBox7.Image = dataClass.gameoverLine_image; break; case 7: pictureBox8.Image = dataClass.gameoverLine_image; break; case 8: pictureBox9.Image = dataClass.gameoverLine_image; break; case 9: pictureBox10.Image = dataClass.gameoverLine_image; break; case 10: pictureBox11.Image = dataClass.gameoverLine_image; break; case 11: pictureBox12.Image = dataClass.Tetrimino; break; default: break; } } } } } }}

試したこと

List<T>やarrayList(これはやめておいた方がいいというのを見ました)なども見たのですが、
理解できませんでした。

補足情報(FW/ツールのバージョンなど)

Windows10 ビジュアルスタジオ2022 .Net 4.7

コメントを投稿

0 コメント