【问题标题】:Change image.source with button?用按钮更改 image.source?
【发布时间】:2011-11-28 07:41:48
【问题描述】:

我仍在学习基础知识,我正在制作一个“随机角色生成器”,为“世界上最无聊的英雄”创建基本统计数据。

我已包含一个图像框(名为 charbox),在生成字符时,它应该显示三个 .jpg 文件之一。

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

我正在使用一个开关(很可能有一个完全错误的语法),它应该使用一个随机整数,我已经声明为“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 是一个位图图像,声明为全局变量,而 switch (img) 仍然使用 1-3 随机数。

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

我应该使用三个单独的位图图像,还是可以使用一个并按照我在开关中尝试的那样更改文件路径?

【问题讨论】:

  • 点击事件中的完整代码是什么?
  • 使用更新代码编辑的问题。我忽略了随机选择的球员统计数据,因为它们都运行良好并且似乎不会影响我的形象。

标签: c# image switch-statement


【解决方案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;
        }

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

【讨论】:

  • 非常感谢。我刚刚偶然发现了一个类似的解决方案,但您的解决方案效率更高。干杯。
【解决方案2】:

所以,现在当我单击生成图像时,会加载 guy1.jpg。但它总是 guy1.jpg

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

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

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

【讨论】:

  • 谢谢。我现在有两个更丰富的位图图像,一切都很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 2016-09-11
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多