C#使用字符串作为资源名称

时间:2017-04-25 18:59:21

标签: c#

我正在使用C#WFA创建类似于Play Your Cards Right的纸牌游戏。

我有52张卡面作为PNG,我希望能够应用于图片盒。我有10个图片框,pbP1Card1 - > pbP1Card5pbP2Card1 - > pbP2Card5。当绘制一张卡片时,我想将下一个图片框从一张背板图片更改为新绘制卡片的相应卡片面。

我正在努力找到一个快速解决方案,让它在所有十个PB中运行。我在想一个类似的方法:

string picbox = "pbP1Card1"; 
string card = "ace_of_spades"; 

用于

picbox.Image = Properties.Resources.card

目标是picbox,并且可以相应地更改当前卡。

编辑:
连同Joe的回答,我通过使用以下内容实现了我想要的目标:

picbox.Image = ((System.Drawing.Image)(Properties.Resources.ResourceManager.GetObject(card)));

1 个答案:

答案 0 :(得分:4)

string picbox = "pbP1Card1"; 
picbox.Image = Properties.Resources.card

这不会以你想要的方式工作。使用字符串值作为变量名称引用并不是一种好习惯。而是使用数组定义PictureBox控件,如下所示:

PictureBox[,] cards = new PictureBox[1,4];

现在,pbP1Card1将为cards[0,0]pbP2Card5将为cards[1,4],您可以使用整数变量来增加位置。所以你可能会在某处看到如下代码:

cards[0,i].Image = Properties.Resources.card

这里最好的事情是您不必删除并重新创建现有的PictureBox。相反,您的初始化代码有几行,如下所示:

 cards[0,0] = pbP1Card1;
 cards[0,1] = pbP1Card2;
 cards[0,2] = pbP1Card3;
 //...
 cards[1,4] = pbP2Card4;

由于PictureBox是一个引用类型,因此您可以使用任一引用访问同一个PictureBox对象,因此您已编写的任何使用现有名称的内容仍然有效。