none
如何在C#創建button array RRS feed

  • 問題

  • 因為想在C#中 寫西洋棋

    使用動態宣告創建8*8棋盤(button array )

    如 Button Chess[] = new System.Windows.Forms.Button()[8*8];

    但出現錯誤訊息:Cannot apply indexing with [] to an expression of type 'System.Windows.Forms.Button' 

    請問該如何解決

    或是能提供更好的方式

    謝謝

    2006年12月8日 上午 03:41

解答

  • C#陣列的[]應該是要接在型態後面而不是變數後面吧...

    Button[] Chess = new System.Windows.Forms.Button()[8*8];

    2006年12月9日 上午 06:07

所有回覆

  • 我比較好奇是誰教你用這個方法的:

    Button Chess[] = new System.Windows.Forms.Button()[8*8];

    你可以用下列方法:

    List<Button> ChessList = new List<Button>;

    for (int i=0; i<64; i++)
           ChessList.Add(new Button());

    Button Chess[] = ChessList.ToArray();

    2006年12月8日 上午 03:48
    版主
  • 謝謝您的回答

    我覺得這有解決答案

    但有一點我覺得疑惑是 為什麼不能直接宣告button array

    而要透過"委派list"產生buttons 再指派給button array?

    2006年12月8日 上午 10:39
  • 這你要去問微軟和 ECMA,C# 的語法本來就不支援。

    而且如果直接宣告就建立物件,那如果在程式中被濫用或誤用,而且又沒有釋放的話,那光是記憶體的損耗就很可以讓你被客戶罵到臭頭 ...
    目前這樣子反而是可以管制程式設計師使用物件的方法,至少記憶體不會被吃的特別快。

    2006年12月8日 下午 02:13
    版主
  • C#陣列的[]應該是要接在型態後面而不是變數後面吧...

    Button[] Chess = new System.Windows.Forms.Button()[8*8];

    2006年12月9日 上午 06:07
  •  小朱 寫信:

    上述的程式碼 我改寫成
    // 創建button array
        List<Button> ChessList = new List<Button>();

        for (int i = 0; i < n * n; i++)
            ChessList.Add(new Button());

        Chess = ChessList.ToArray();

    // 編輯屬性
    for (int i = 0; i < Chess.Length; i++)
    {
        Chess[ i ].Location = new System.Drawing.Point(30 + (int)(i / n) * ChessSize, 50 + (i % n) * ChessSize);
        Chess[ i ].Name = "Chess" + i.ToString();
        Chess[ i ].Size = new System.Drawing.Size(ChessSize, ChessSize);
        Chess[ i ].TabIndex = i + 1;
        Chess[ i ].Text = i.ToString();
        Chess[ i ].UseVisualStyleBackColor = true;
    }

    而在執行form後,使用其中button執行上述方法

    但沒有出現button

    請問為什麼會這樣?

    ps.發問的方法是我猜想的...

    2006年12月10日 上午 08:25
  • 你沒有把按鈕放到 Form 裡面,會出現那就是準備要去拜拜的時候了 .
    2006年12月11日 上午 01:37
    版主
  • 在迴圈下補上Add.Controls(ChessIdea);

    謝謝您的回應

    2006年12月11日 上午 10:41
  • 看到最後還是沒有人提到  Button Array
    我來提供我的解法,如下

            private void button1_Click(object sender, EventArgs e) {
                Button[] btns = new Button[8 * 8]; // 產生 64 個 Button Reference,並初始化為 null
                for (int y = 0; y < 8; ++y) {
                    for (int x = 0; x < 8; ++x) {
                        int idx = x+y*8;
                        btns[idx] = new Button();
                        btns[idx].Text = String.Format("x={0}, y={1}", x, y);
                        btns[idx].Left = x * btns[0].Width;
                        btns[idx].Top = y * btns[0].Height;
                    }
                }

                this.Controls.AddRange(btns);  
            }

    by Chui-Wen Chiu
    http://chuiwenchiu.spaces.live.com
    2006年12月12日 下午 05:43