2014-01-20 77 views
0

我目前正在寫一個XO遊戲與C#和有問題。 XO表是一個asp按鈕的集合,我想寫一個函數,在每個按鈕中放入X或O值 - 它需要是動態的。我該怎麼寫這樣的功能?這是我到目前爲止所做的一個例子。XO遊戲在ASP.net和C#

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      turndisplay.Visible = true; 


      Session["p1"] = player1; 
      Session["p2"] = player2; 
      player1.setsymbol("X"); 
      player2.setsymbol("O"); 

      //Button1.Click += Button1_Click; 
      //Button2.Click += Button_Click; 
      //Button3.Click += Button_Click; 
      //Button4.Click += Button_Click; 
      //Button5.Click += Button_Click; 
      //Button6.Click += Button_Click; 
      //Button7.Click += Button_Click; 
      //Button8.Click += Button_Click; 
      //Button9.Click += Button_Click; 
     } 

     if (turn == 0) 
     { 
      turndisplay.Text = (Session["player1"] as Player).getname(); 
     } 
     else 
     { 
      turndisplay.Text = (Session["player2"] as Player).getname(); 
     } 

    } 

    public void pushthebutton() // currently effects only on button 1 ! 
    { 
    if (turn == 0) 
    { 
       player1.setsymbol("X"); 
       Button1.Text = (Session["p1"]as Player).getsymbol(); 
       turndisplay.Text = (Session["player2"] as Player).getname(); 
       turn = 1; 
      } 
      else 
      { 
       player2.setsymbol("O"); 
       Button1.Text = player2.getsymbol(); 
       turndisplay.Text = (Session["player1"] as Player).getname(); 
       turn = 0; 
      } 

     } 


    protected void Button1_Click(Button sender, EventArgs e) 
    { 
     if (Button1.Text == " ") 
     { 
      pushthebutton(); 
      gamecheck(); 
     } 
    } 

我該如何影響玩家想要的每個按鈕,而不用寫9次?

編輯後*所以你說..改變(對象發件人)爲(按鈕發件人)?但我的功能pushtebutton只知道Button1.Text

+0

@WilliamCustode有你答案。爲按鈕單擊事件創建一個方法 - 並將該方法分配給每個按鈕「OnClick」事件。你需要將'sender'轉換爲'Button'類型,然後你可以得到'Text'屬性 - 'Button btn = sender as Button; if(btn!= null){if(btn.Text ==「」){}}' – Tim

回答

1

威廉的回答是正確的做法。您無需爲每個按鈕設置單獨的方法 - 部分或全部按鈕可以使用相同的方法。

所以說,你有這樣的方法:

protected void Button_Click(Button sender, EventArgs e) 
{ 

    Button btn = sender as Button; 

    if (btn != null) 
    { 
     if (btn.Text == " ") 
     { 
      pushthebutton(); 
      gamecheck(); 
     } 
    } 
} 

上面的代碼使用as operator給發件人對象轉換爲Button。如果轉換不成功,btn將爲空,因此將檢查if。否則,轉換成功,您可以檢查Text屬性。

在你的頁面加載,你只需指定Button_Click上述方法對每個按鈕:

Button1.Click += Button_Click; 
Button2.Click += Button_Click; 
Button3.Click += Button_Click; 
Button4.Click += Button_Click; 
Button5.Click += Button_Click; 
Button6.Click += Button_Click; 
Button7.Click += Button_Click; 
Button8.Click += Button_Click; 
Button9.Click += Button_Click; 
+0

是的,我有想法..而不是9按鈕單擊事件創建一個可以影響頁面中的每個按鈕? – user3209554

+0

@ user3209554 - 是的,你明白了。快樂的編碼! – Tim

+0

非常感謝你! – user3209554

2

寫一次,在Page_Load像這樣把它掛:

Button1.Click += Button_Click; 
Button2.Click += Button_Click; 
Button3.Click += Button_Click; 
// etc... 
+0

所以在頁面加載時將它從1寫入9,並將Button_Click放在函數內部? – user3209554

+0

不,您按原樣留下Button#_Click方法之一,並將其​​從Button1_Click重命名爲Button_Click。然後在1-69頁面內寫入Page_Load。 –

+0

它不工作,我改變了方法名稱都是一樣的(Button_Click)???並寫了上面的三行,在我的頁面加載內,但它使語法錯誤 – user3209554