ユーザーが入力する行数と列数に基づいてボタンのグリッドを作成しようとしていますが、グリッドを作成するメソッドが機能しません。私がそれを呼び出すと、グリッドは作成されません。クラスで作成されたメソッドを使用してフォーム上にボタンを作成するにはどうすればよいですか?
このメソッドはTileClassの内部にあり、私はGameBoardフォームで呼び出そうとしています。私はクラスを適切に使用していないような気がします。私はこれがうまくいくと思っているので、私はメソッドを正しく呼び出すとは思わない。
This is what the form looks like
class TileClass : Button
{
public const int LEFT = 20;
public const int WIDTH = 50;
public const int HEIGHT = 50;
public const int TOP = 50;
public const int VGAP = 30;
public int x;
public int y;
public int column;
public int row;
private int incomingRow;
private int incomingColumn;
public int IncomingRow { get => incomingRow; set => incomingRow = value; }
public int IncomingColumn { get => incomingColumn; set => incomingColumn = value; }
public TileClass()
{
}
public void CreateGrid()
{
x = LEFT;
y = TOP;
column = IncomingColumn;
row = IncomingRow;
for (int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++)
{
Button b = new Button();
b.Left = x;
b.Top = y;
b.Width = WIDTH;
b.Height = HEIGHT;
b.Text = j.ToString();
x += VGAP + HEIGHT;
this.Controls.Add(b);
}
}
}
}
ゲームボードフォーム
public partial class GameBoard : Form
{
TileClass tileClass = new TileClass();
public GameBoard()
{
InitializeComponent();
}
private void txtEnter_Click(object sender, EventArgs e)
{
tileClass.IncomingColumn = int.Parse(txtColumn.Text);
tileClass.IncomingRow = int.Parse(txtRow.Text);
tileClass.CreateGrid();
}
「動作しない」とはどういう意味ですか?あなたはボタンクラスから継承する新しいクラスを持っていて、そのメソッドはその中にもっと多くのボタンを作成します。クラスからボタンを継承するべきではありません。パネルやグループボックスなどのコントロールから継承する必要があります。 –
うわー、あなたはこのすべての問題に行き、 'IncomingCollumn'と' IncomingRow'の値を解析し、それらをフィールドに渡してからローカル変数に渡します。そしてあなたはそれらで何もしません。あなたの 'for'ループは行と列の数を見なければならないと思いませんか? –