我正在开发一个名片,我的资源中有52个位图(所有卡片)。因为它在处理2张牌时现在有效:
public void GiveTwoRandomCardsFromCardsList()
{
Random random = new Random();
System.Threading.Thread.Sleep(100);
int slumptal = random.Next(0, 52);
card1 = Cards[slumptal];
bool flag = false;
while (!flag)
{
System.Threading.Thread.Sleep(100);
int slumptal2 = random.Next(0, 52);
if (slumptal != slumptal2)
{
card2 = Cards[slumptal2];
flag = true;
}
}
}
它的作用是从字符串列表中给出2个字符串的值。该列表包含52个字符串h2,h3,h4,h5等。现在,如果我想显示某张卡的图像,我有这些长开关:
switch (whatIsTheFirstCard)
{
//Hearts
case "h2":
Card1Picture.Image = Resource1.h2;
break;
case "h3":
Card1Picture.Image = Resource1.h3;
break;
case "h4":
Card1Picture.Image = Resource1.h4;
break;
所有牌都等等。有没有办法将图像直接添加到列表中然后只调用该列表?它现在的方式要求我复制并粘贴我希望显示的每张卡的开关。毋庸置疑,我宁愿只有一个可以保留所有位图卡的列表。
private void FlopButton_Click(object sender, EventArgs e)
{
theCards.DealTheFlop();
FlopCard1.Image = thebitmapgoeshere;
}
我不知道将位图添加到列表然后从该列表中调用它们的语法。
答案 0 :(得分:1)
我使用字典。您可以使用
创建词典Dictionary<string, Bitmap> myCards = new Dictionary<string, Bitmap>();
接下来,您可以迭代文件夹内容或其他内容,然后去(例如):
myCards.Add("h2", "myfolder/h2.bmp");
最后你可以使用它们来使用它们:
myControl.Image = myCards["h2"];
答案 1 :(得分:1)
如果您在代码中使用与资源中完全相同的卡片标识符,则可以直接通过资源管理器获取相应的资源,即
FlopCard1.Image = (Bitmap)Resources.ResourceManager.GetObject("h4", Resources.Culture);
在内部,这也正是生成的代码所做的。
这样,您不需要单独的列表,甚至可以轻松地为不同的文化指定不同的卡片组。
答案 2 :(得分:1)
使用它:
Card1Picture.Image = (Image)Resource1.ResourceManager.GetObject("h1");
修改强> 对不起,我没有看到乔治的回答:/