【问题标题】:Can I associate an image with a class and load this image without creating an instance of the class?我可以将图像与类关联并加载此图像而不创建类的实例吗?
【发布时间】:2011-05-26 14:53:05
【问题描述】:

潜伏已久,第一次发帖。

我的问题是:

使用 C# 2.0,有没有办法将图像与类/类型相关联,这样我就不必为了从该类中获取图像对象而创建该类的实例?

我想要做的是扫描我的应用程序中的所有 .dll 并构造一个类和相应属性的列表。我的这个工作很好,现在我想以某种方式将一个图像与每个类关联起来,这样我就可以显示一个类列表并为每个类提供一个唯一的图像。

我已经尝试在 SO 和互联网上搜索答案,但找不到任何确定的答案。任何帮助将不胜感激。

谢谢,

凯尔

【问题讨论】:

    标签: image attributes c#-2.0


    【解决方案1】:

    你可以创建一个 ImageAttribute。

    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
    class ImageAttribute : Attribute
    {
        private string ImagePath { get; set; } 
    
        public ImageAttribute(string imagePath)
        {
            ImagePath = imagePath;
        }
    
        public Bitmap Image
        {
            get { return new Bitmap(ImagePath); }
        }
    }
    

    或数据库ID,只是识别图像的某种方式。

    【讨论】:

    • 感谢您的快速回复。我了解您的解决方案,唯一的问题是我的图像当前已添加到每个项目的资源文件中。如果我只知道如何通过“Properties.Resources.MyImage”之类的资源文件访问它,有没有办法获取文件路径?
    • 那么这只是获取已编译资源的一般方法。您可以传递已编译资源的名称。我过去做过类似的事情,但现在没有代码了。
    【解决方案2】:

    想出如何使用这里和那里的想法来做到这一点。

    1. 将图像标记为 EmbeddedResource。

    2. 创建用于指定图像名称的属性。

    3. 读取图像名称属性后,使用以下命令在声明类的程序集中定位图像资源:

      string[] all = info.Type.Assembly.GetManifestResourceNames();
      
      foreach (string resourceStr in all)
      {
        if (!String.IsNullOrEmpty(resourceStr) && resourceStr.EndsWith(String.Format(".{0}", iconName), true, CultureInfo.CurrentCulture))
        {
          Stream file = info.Type.Assembly.GetManifestResourceStream(resourceStr);
      
          if (file != null)
          {
            info.Icon = Image.FromStream(file);
          }
        }
      }
      

    【讨论】:

      猜你喜欢
      • 2020-08-10
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      相关资源
      最近更新 更多