上下文:我正在尝试用Windows.Forms做一个五子棋的小游戏。我有3个类GameBoard.cs,Points.cs和Checkers.cs (以及Form1.cs)。我需要做的是使用我的一些其他类来更改PictureBox的某些属性的值。
具体来说,我有这样的代码:
// gameBoard.cs
namespace backgammon
{
public class gameBoard
{
Checker checker1;
Points point1;
Points[] pointsArray;
public gameBoard()
{
// make new checker (ID, PictureBox, startingPoint)
checker1 = new Checker(1, checkerPicBox1, 1);
// make new Point (ID, arrayOfCheckers)
point13 = new Points(1, new Checker[]{checker1 /*,checker2... etc*/});
pointsArray = new Points[MAX_POINTS];
pointsArray[0] = point1;
}
}
}所以这就是我如何“设置”跳棋和点的。我的checker和point类可以获取和设置传递到其构造中的所有变量。
问题:我想要实现的是在点击的时候“高亮”一个棋盘格。
在Form1中:
// Form1.cs
private void checkerPicBox1_Click(object sender, EventArgs e)
{
int pointNumber = gameBoard.checker1.getPointMember();
// find the top most checker in the checker array so we can highlight it
Checker topMost = gameBoard.pointsArray[pointNumber - 1].getCheckerFromIndex(gameBoard.pointsArray[pointNumber - 1].getCheckerArray().Length - 1);
// get the picturebox and change the image
topMost.getPictureBox().BackgroundImage = global::Backgammon.Properties.Resources.blackCheckerSelected;
}代码编译并运行,但是当它到达checkerPicBox_Click的最后一行时,似乎什么都没有发生(图像没有改变)。
这是怎么回事?我是否没有正确的PictureBox实例?或者我做这件事的方式很奇怪/不是我应该做的?
发布于 2014-04-07 16:47:38
既然Checker连接到了pictureboxes,为什么不在Checker类中为它们创建一个新的引用属性呢?
您可以在构造函数中传递包含picturebox的表单,并使用该表单创建对正确picturebox实例的引用。
// gameBoard.cs
namespace backgammon
{
public class gameBoard
{
Checker checker1;
Points point1;
Points[] pointsArray;
public gameBoard(Form gameForm)
{
// make new checker (ID, PictureBox, startingPoint)
checker1 = new Checker(1, gameForm.checkerPicBox1, 1);
// make new Point (ID, arrayOfCheckers)
point13 = new Points(1, new Checker[]{checker1 /*,checker2... etc*/});
pointsArray = new Points[MAX_POINTS];
pointsArray[0] = point1;
}
}
}将picturebox属性添加到Checker类:
// checker.cs
public class Checker
{
PictureBox _picturebox;
//... other code here
public Checker(int ID, PictureBox picturebox, Points startingPoint)
{
_picturebox = picturebox;
//...other code here
}
}然后我们可以在游戏形式中使用这个:
gameBoard gameBoard1 = new gameBoard(this);
gameBoard1.checker1._picturebox.BackgroundImage = global::Backgammon.Properties.Resources.blackCheckerSelected;
gameBoard1.checker1._picturebox.Invalidate();https://stackoverflow.com/questions/22408938
复制相似问题