用按钮更改image.source?

时间:2011-11-27 22:25:18

标签: c# image switch-statement

我还在学习基础知识,而且我正在制作一个“随机字符生成器”,为“世界上最无聊的英雄”创造基本属性。

我已经包含了一个Image框(名为charbox),在生成字符时,它应该显示三个.jpg文件中的一个。

我已将所有3个jpg添加到我的解决方案中(它们都列在解决方案资源管理器的images文件夹中)但我无法选择要显示的按钮。

我正在使用一个开关(可能语法完全错误),它应该使用一个随机整数,我声明为“img”,范围为(0,3)。

这是我从其他网站上提取的代码,但它在我的程序中不起作用:

switch (img)
        {
            case 1:
                charbox.Source = new BitmapImage(new Uri(@"C:\Users\Otis\documents\visual studio 2010\Projects\WpfApplication2\WpfApplication2\Images\guy1.jpg", UriKind.Relative));
                break;
            case 2:
                charbox.Source = new BitmapImage(new Uri(@"C:\Users\Otis\documents\visual studio 2010\Projects\WpfApplication2\WpfApplication2\Images\guy2.jpg", UriKind.Relative));
                break;
            default:
                charbox.Source = new BitmapImage(new Uri(@"C:\Users\Otis\documents\visual studio 2010\Projects\WpfApplication2\WpfApplication2\Images\guy3.jpg", UriKind.Relative));
                break;
        }

知道如何让这项工作成功吗?

- 编辑 -

我做了一些观察,并将我的图像选择代码更改为:

#region Image Selection

        bmguy.BeginInit();


        switch (img)
        {
            case 0:
                bmguy.UriSource = new Uri(@"C:\Users\Otis\Pictures\guy1.jpg");
                break;
            case 1:
                bmguy.UriSource = new Uri(@"C:\Users\Otis\Pictures\guy2.jpg");
                break;
            case 2:
                bmguy.UriSource = new Uri(@"C:\Users\Otis\Pictures\guy3.jpg");
                break;
        }

        bmguy.EndInit();
        charbox.Source = bmguy;
        #endregion

其中bmguy是声明为全局变量的bitmapimage,而switch(img)仍使用1-3随机数。

所以,现在当我点击生成图片加载guy1.jpg。但它始终是guy1.jpg,如果我再次点击生成它会引发一个关于位图初始化的错误,只发生一次。

我应该使用三个单独的bitmapimages,还是可以使用一个并更改我在交换机中尝试的文件路径?

2 个答案:

答案 0 :(得分:1)

        Random r = new Random();
        int rand = r.Next(0, 3);
        switch (rand)
        {
            case 0:
                charbox.Load("image1");
                break;
            case 1:
                charbox.Load("image2");
                break;
            case 2:
                charbox.Load("image3");
                break;
        }

您每次都尝试重新初始化位图。只需在第一次将它分配到图片框。

答案 1 :(得分:0)

  

所以,现在当我点击生成图片加载guy1.jpg。但它始终是guy1.jpg

可能是因为img始终等于1 ...逐步调试代码以了解原因。

  

如果我再次点击生成它会引发一个关于位图初始化的错误,只发生一次。

您需要创建BitmapImage的新实例,不能重复使用同一个实例。更好的方法是加载3 BitmapImages并使用其中一个,具体取决于img

的值