gpt4 book ai didi

c# - 编辑来自另一个类的 PictureBox 的属性

转载 作者:太空宇宙 更新时间:2023-11-03 15:58:41 25 4
gpt4 key购买 nike

上下文:我正在尝试在 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;
}
}
}

这就是我“设置”跳棋和分数的方式。我的检查器和点类可以获取和设置传递到其构造中的所有变量。

问题:我想要实现的是在点击检查器后“突出显示”它。

在 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 实例不正确吗?还是我以一种奇怪的方式/不是我应该的方式这样做?

最佳答案

既然检查器连接到图片框,为什么不在 Checker 类中为它们创建一个新的引用属性?

您可以在构造函数中传递包含图片框的表单,并使用该表单创建对正确图片框实例的引用。

// 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();

关于c# - 编辑来自另一个类的 PictureBox 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22408938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com