将位图资源添加到列表中

时间:2014-02-18 13:12:52

标签: c# list bitmap resources

我正在开发一个名片,我的资源中有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;

    }

我不知道将位图添加到列表然后从该列表中调用它们的语法。

3 个答案:

答案 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");

修改 对不起,我没有看到乔治的回答:/