能够在Windows窗体中更改“this”所指的内容

时间:2017-07-17 22:36:08

标签: c# windows-forms-designer

我正在尝试在Windows窗体中重新创建某种钢琴瓷砖,但我遇到了一些问题。游戏依赖于4x4面板的布局,可以随意改变颜色。我有一个启动函数,将在每一行上分配一个随机面板,以便更改为黑色。我有另一个功能,它将在面板上向上移动,将每个黑色面板向下移动一个。现在我已将此分配给一个按钮,所以我知道它有效,但我试图弄清楚如何仅在玩家点击底行的一个黑色面板时向下移动面板。如果玩家没有点击黑色面板而是点击白色面板,则游戏结束,错误的面板将变为红色。 [见照片] [基本游戏] 1

我似乎遇到的问题是我希望底部的4个面板都有相同的点击事件,它将检查面板的颜色并执行必要的操作。我认为我的代码可以工作,但事实并非如此。

 private void regclick(object sender, EventArgs e)
    {

        if (this.BackColor== Color.White)
        {
            this.BackColor = Color.Red;
            MessageBox.Show("Game Over");
            clearRow(5);
        }
        else if (this.BackColor == Color.Black)
        {
            moveLocation();
        }
    }

我意识到'this'关键字指的是整个窗口,所以如果颜色是黑色的话它只会将整个窗口的颜色改为红色,但有没有办法改变'this'所指的内容。我试图让它引用被点击的瓷砖。

非常感谢您的反馈。

1 个答案:

答案 0 :(得分:2)

this在此处引用Windows对象。您需要获取Panel个对象才能更改Backcolor。您只需将sender转换为Control对象即可。例如:

private void regclick(object sender, EventArgs e)
{
    var control = (Control)sender;

    if (control.BackColor== Color.White)
    {
        control.BackColor = Color.Red;
        MessageBox.Show("Game Over");
        clearRow(5);
    }
    else if (control.BackColor == Color.Black)
    {
        moveLocation();
    }
}

请参阅MSDN链接:https://msdn.microsoft.com/en-us/library/system.windows.forms.control.backcolor(v=vs.110).aspx