如何设置动态资源路径?

时间:2014-01-01 17:27:44

标签: c# .net winforms

我想以这种方式访问​​我的资源:

string iconVar = "20";
imgIcon.Image = "Properties.Resources." + iconVar;

这是不可能的,因为我给的是字符串而不是图像。

所以问题是,如何在不给代码中的资源名称的情况下访问资源?

我通常知道你应该使用

imgIcon.Image = Properties.Resources.image1;

问题是,我还不知道是否会使用image1或image2。

我试过了:

imgIcon.ImageLocation = "pack://application:,,,/project1;component/Properties.Resources._" + iconVar;
imgIcon.Refresh();

但这似乎不起作用。

4 个答案:

答案 0 :(得分:0)

我会做一些假设:

  • 您正在使用WinForms
  • 您已将图片作为“图片”
  • 添加到项目资源中
  • imgIcon控件是PictureBox

如果这一切都是真的,那么你应该能够直接分配它。

imgIcon.Image = Properties.Resources.YourImageName

我不确定你的意思是“没有给出资源的名称”。如果要指定图像,则必须提供其名称。

答案 1 :(得分:0)

如果我们谈论的是wpf,我认为你需要这样的东西:

BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri("pack://application:,,,/YourApplicationName;component/Properties.Resources."+iconVar, UriKind.RelativeOrAbsolute);
bi.EndInit();
imgIcon.Image.Source = bi;

确保将 YourApplicationName 替换为您的实际应用程序名称(程序集/ exe的名称)

答案 2 :(得分:0)

你说你还不知道你会用什么图像,为什么会这样?您是否有理由根据字符串确定所需的图像?

如果您打算根据特定条件设置图片,可以尝试使用此字符而不是使用字符串:

Image image1 = Properties.Resources.image1;
Image image2 = Properties.Resources.image2;

imgIcon.Image = someBool ? image1 : image2;

如果您尚未确定最终版本所需的图像,并且希望在代码中的所有位置轻松更改它,请将图像定义为全局变量并使用该变量。

修改

要根据所述图片的名称加载图片,您可以尝试以下操作(不是自己测试,而是从this回答):

imgIcon.Image = (Image)Resources.ResourceManager.GetObject("20");

答案 3 :(得分:0)

我修好了。 这是我使用的代码:

Assembly _assembly;
Stream _imageStream;
_assembly = Assembly.GetExecutingAssembly();
_imageStream = _assembly.GetManifestResourceStream("project.Resources._" + iconVar + ".png");
imgIcon.Image = new Bitmap(_imageStream);

感谢您的回复!