我正在尝试为 PC 制作流行的游戏“ Ruzzle ”请参阅:
我认为我陷入了一个非常愚蠢的错误,但由于某种原因,它看起来像一个属性不起作用!
我有一个名为“check”的类,它有一个名为Used
. 如果它设置为 true,背景将从白色变为橙色。这是通过以下方式实现的:
bool _used;
public bool Used
{
get { return _used; }
set { _used = value; Invalidate(); }
}
void Check_Paint(object sender, PaintEventArgs e)
{
Graphics area = e.Graphics;
if (_used==false)
{
area.FillRectangle(Brushes.White, 0, 0, Width - 1, Height - 1);
...
}
else
{
area.FillRectangle(Brushes.Orange, 0, 0, Width - 1, Height - 1);
...
}
}
我已分配给mouseClick
我将在课堂上定义的事件Ruzzle
。该类Ruzzle
处理游戏,基本上是一个二维数组Check
。
public event EventHandler selected;
//in the constructor I've put this
this.MouseClick += new MouseEventHandler(Check_MouseClick);
最后
void Check_MouseClick(object sender, MouseEventArgs e)
{
if (selected != null)
{
selected(this, e);
}
Invalidate();
}
在课堂Ruzzle
上,我尝试Check
通过执行以下操作来更改对象的 bool 属性:
public Ruzzle(Control father)
{
myGame = new Check[4, 4];
for (int i = 0; i < 4; i++)
{
for(int j=0;j<4;j++)
{
myGame[i, j] = new Check(50, father,i,j);
myGame[i, j].Location = new Point((i * 50), (j * 50));
father.Controls.Add(myGame[i, j]);
myGame[i, j].selected += new EventHandler(Ruzzle_selected);
}
}
}
void Ruzzle_selected(object sender, EventArgs e)
{
int r = (sender as Check).Row;
int c = (sender as Check).Column;
myGame[r, c].Used = true;
}
和属性工作正常Row
,Column
因为如果我执行 MessageBox.Show 我得到正确的值。但是,当它在Check
类中执行 Paint 方法时,Used
布尔值不会改变!
我究竟做错了什么?