1

画像

上の画像はプログラムの外観です

上の 4 つのボタンは、次のように 2 次元配列に配置されています。

private Button[,] btns;

        public Form1()
        {
            InitializeComponent();

            btns = new Button[,] { { button2 , button1 },
                                   { button4 , button3 }};
        }

4 つのボタンが

            foreach (var btn in btns)
            {
                btn.Enabled = false;
            }

そして、私がしたいのは、下の2つのボタンをクリックすると、その行の各ボタンが有効になり、色が署名されます(Connect 4ゲームのように赤と青が順番に)

私は問題の半分を解決することができましたが、行1ボタンをクリックすると行2も有効になり、行2ボタンをクリックすると行1から有効になり始めます

各ボタンが 2 次元配列を処理するように制限して、正しい行のみを有効にする方法を教えてください。

ここに完全なコードがあります

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        private Button[,] btns;

        public Form1()
        {
            InitializeComponent();

            btns = new Button[,] { { button2 , button1 },
                                   { button4 , button3 }};
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            foreach (var btn in btns)
            {
                btn.Enabled = false;
            }
        }
        int cc = 0;


        private void button5_Click(object sender, EventArgs e)
        {

            foreach (var btn in btns)
            {

                if (!btn.Enabled)
                {
                    btn.Enabled = true;

                    if (cc == 0)
                    {
                        cc = 1;
                        btn.BackColor = Color.Red;

                    }
                    else
                    {
                        cc = 0;
                        btn.BackColor = Color.Blue;
                    }


                    return;
                }
            }
        }


        private void button6_Click(object sender, EventArgs e)
        {

            foreach (var btn in btns)
            {

                if (!btn.Enabled)
                {
                    btn.Enabled = true;

                    if (cc == 0)
                    {
                        cc = 1;
                        btn.BackColor = Color.Red;

                    }
                    else
                    {
                        cc = 0;
                        btn.BackColor = Color.Blue;
                    }

                    return;
                }
            }
        }
    }
}

解決した

この問題は解決され、これが私が解決した方法です:

 private void button5_Click(object sender, EventArgs e)
            {
               Button[] row1 = new Button[] {button2, button1};
                foreach (var roww1 in row1)
                {

                    if (!roww1.Enabled)
                    {
                        roww1.Enabled = true;

                        if (cc == 0)
                        {
                            cc = 1;
                            roww1.BackColor = Color.Red;

                        }
                        else
                        {
                            cc = 0;
                            roww1.BackColor = Color.Blue;
                        }


                        return;
                    }
                }
            }
4

1 に答える 1

3

多次元配列を使用する場合、一度に配列の 1 行を反復処理するには、foreach の代わりに for ループを使用する必要があります。

private void button5_Click(object sender, EventArgs e)
{
   for (int col = 0; col < btns.GetLength(1); ++col)
   {
      var btn = btns[0, col];
   //snip
}

private void button6_Click(object sender, EventArgs e)
{
   for (int col = 0; col < btns.GetLength(1); ++col)
   {
      var btn = btns[1, col];
   //snip
}
于 2012-11-01T16:42:00.023 に答える