2014-01-20 39 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