Winform开发框架中如何使用DevExpress的内置图标资源

2020-01-05 10:06:44丽君

这个代码它就是从资源里面进行获取对应的图表资源。


private System.Resources.ResourceReader GetResourceReader(System.Reflection.Assembly imagesAssembly)
  {
   var resources = imagesAssembly.GetManifestResourceNames();
   var imageResources = Array.FindAll(resources, resourceName => resourceName.EndsWith(".resources"));
   if (imageResources.Length != 1)
   {
    throw new Exception("读取异常");
   }
   return new System.Resources.ResourceReader(imagesAssembly.GetManifestResourceStream(imageResources[0]));
  }

另外,我们根据图表的文件名结构,我们通过正则表达式来读取它的对应信息,然后把它的大小、类别、集合信息存储起来。


 string reg = @"(?<collection>S*?)/(?<category>S*?)/(?<name>S*)";
 var collectionItem = CRegex.GetText(key, reg, "collection"); 
 var categoryItem = CRegex.GetText(key, reg, "category");
 string sizeReg = @"_(?<size>S*).";
 var sizeItem = CRegex.GetText(key, sizeReg, "size");

图表信息读取了,我们需要解析它然后存储起来,把图标的Image对象放在一个字典类别里面,方便按照组别进行展示。


Image image = GetImageFromStream((System.IO.Stream)dict.Value);
 if (image != null)
 {
  var item = new DevExpress.XtraBars.Ribbon.GalleryItem(image, key, key);
  if (!ImageCollection.ContainsKey(key))
  {
   ImageCollection.Add(key, item);
  }
 }

有了这些资源,我们对它们进行搜索就显得很方便了,我们如果需要根据文件名或者其他条件进行查询集合的数据,提供一个通用的方法即可,如下代码所示。


/// <summary>
  /// 根据条件获取集合
  /// </summary>
  /// <returns></returns>
  public Dictionary<string, GalleryItemCollection> Search(List<string> collection, List<string> categories, 
   List<string> size, string fileName = "")
  {
   Dictionary<string, GalleryItemCollection> dict = new Dictionary<string, GalleryItemCollection>();

   GalleryItemCollection list = new GalleryItemCollection();
   foreach (var key in ImageCollection.Keys)
   {
    //使用正则表达式获取图标文件名中的集合、类别、大小等信息
    string reg = @"(?<collection>S*?)/(?<category>S*?)/(?<name>S*)";
    var collectionItem = CRegex.GetText(key, reg, "collection");
    var categoryItem = CRegex.GetText(key, reg, "category");
    string sizeReg = @"_(?<size>S*).";
    var sizeItem = CRegex.GetText(key, sizeReg, "size");

    //如果是查询处理,把记录放到查询结果里面
    if (!string.IsNullOrEmpty(fileName))
    {
     if(key.Contains(fileName))
     {
      list.Add(ImageCollection[key]);
     }
     dict["查询结果"] = list;
    }
    else
    {
     //如果是集合和列表中包含的,把它们按类别添加到字典里面
     if (collection.Contains(collectionItem) && 
      categories.Contains(categoryItem) && 
      size.Contains(sizeItem))
     {
      if (!dict.ContainsKey(categoryItem))
      {
       GalleryItemCollection cateList = new GalleryItemCollection();
       cateList.Add(ImageCollection[key]);
       dict[categoryItem] = cateList;
      }
      else
      {
       GalleryItemCollection cateList = dict[categoryItem];
       cateList.Add(ImageCollection[key]);
      }
     }
    }
   }
   return dict;
  }