时间:2019-03-17 标签:c#pictureboxinheritanceforcardgame

标签 c# inheritance picturebox playing-cards

我正在为 OOP 简介论文编写纸牌游戏。游戏本身符合规范,但我现在玩它是为了自己的满足和学习。

我有一个卡片类,其中包含图像、其等级和套件。在 GUI 上,我使用图片框来显示存储在各个卡片中的图像(这些图像存储在牌组类的卡片数组中),

cardPictureBox1.Image = card1.show();
cardPictureBox2.Image = card2.show();
cardPictureBox3.Image = card3.show();
...
etc

是否可以使卡片类继承 PictureBox 控件,以便屏幕上的内容“实际上”是卡片类的实例(而不是保存其图像值的框),这将大大减少人们必须跳过多少圈才能获得卡片的其他相关信息。

最佳答案

您可以创建一个继承自 PictureBox(而不是继承自 UserControl)的 UserControl(名为 Card 或 ucCard 或其他名称),而不是使用 Card 类。在 C# 中执行此操作的最简单方法是添加具有所需名称的 UserControl,然后在代码中更改顶行

public partial class ucCard : UserControl

public partial class ucCard : PictureBox

您的 ucCard 控件将具有 PictureBox 的所有属性(包括图像,您将在其中存储卡的位图)。当您构建项目时,编译器将在引用 AutoScaleMode 的行上抛出 - 只需删除此行并重新构建即可。

然后,您可以添加卡片所需的任何其他属性和方法,例如卡片正面和背面的花色和等级以及位图(背面可以是静态的,以便所有卡片都共享它),也许还可以添加 Flip( ) 方法来切换前后图像。

就 OOP 而言,神圣三位一体中被遗忘的部分似乎是封装。在这种情况下,由于卡片是 ​​UI 中与用户交互的视觉元素,因此将其封装为 UserControl 是非常有意义的。正如您已经注意到的,这将使应用程序更简单,您的生活也更轻松。

关于时间:2019-03-17 标签:c#pictureboxinheritanceforcardgame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1436381/

相关文章:

c# - 如何禁用使用 Iframe 打开其他 URL 的按钮?

c# - 在不依赖 app.config 的情况下使用 SOAP Web 服务

c# - 发送保存在磁盘上的 eml 文件

javascript - 令人困惑的 JavaScript 语句 : "var x = new this();"

c# - 打印和打印在 C# 中预览位图和带有文本的标签

c# - 关闭窗体后 PictureBox 继续加载

C# 如何在图片框中显示图片

c# - 从程序集中删除签名

python - 子类 init 方法只调用基础初始化方法

vb.net - 是否可以在 VB.net 中测试两种类型是否具有相同的未知继承?