我试图做的热门游戏“Ruzzle”为PC见:C#窗体,属性不起作用?
我被困在一个非常愚蠢的错误,我认为,但由于某种原因,它看起来像一个属性是不加工!
我有一个名为“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
对象的布尔属性:
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;
}
的和Column
性工作正常监守如果我做一个MessageBox.Show我得到正确的值。 然而,当它执行Check
类中的Paint方法时,Used
布尔值将不会更改!
我在做什么错?
虽然它可能无法解决您的问题,但请移除myGame [r,c] .Invalidate();'。这是不需要的,因为设置'Used'已经调用'Invalidate()'。 – 2013-03-13 16:01:00
哎呀好的谢谢! – 2013-03-13 16:04:04
您是否调试过它,以确定所使用的属性设置器是否实际上被调用? – Charleh 2013-03-13 16:15:08