我正在用c#写一个XO游戏并遇到问题。 XO表是asp按钮的集合,我想编写一个在每个按钮中放置X或O值的函数 - 它需要是动态的。我该怎么写这样的功能? 这是我到目前为止所做的一个例子。
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 :(得分:2)
写一次并将其挂钩在Page_Load
中,如下所示:
Button1.Click += Button_Click;
Button2.Click += Button_Click;
Button3.Click += Button_Click;
// etc...
答案 1 :(得分: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;