用程序来列举项目资源

为了让全项目的资源能够有效的被运用,不可能不了解建立与存取项目资源的方法。除了使用资源编辑器之外,我们也可以在应用程序中透过程序代码来存取项目资源,虽然使用Resources对象能够非常容易去存取特定的项目资源,但是如果我们希望在应用程序中透过程序代码来列举项目资源的话,该怎么做呢?

 

要想透过程序代码来枚举项目资源,必须使用System.Resources命名空间中的ResourceReader类。一般的作法是,先使用指定的项目资源文件来创建一个ResourceReader对象,接着调用ResourceReader对象的GetEnumerator方法来取得其枚举操作符,然后再通过一个循环去调用列举子的MoveNext方法即可取得各个项目资源。


1-1


1-2 资源阅读器


1-3资源阅读器


1-4资源阅读器


1-5 资源阅读器

 

程序范例:

程序范例DemoForm001.cs示范如何创建一个资源阅读器来让您产看项目文件中的所有资源。首先,您必须如图1-所示去打开一个资源文件(.resources),接下来会将该资源文件中的所有资源列示于DataGridView控件中,每一项资源的名称、类型、与值都一览无遗。您可以如图1-2~1-5所示,从中选取所要阅读的资源,该项资源的资源名称、资源类型、资源值、以及字节会完整列示于画面的右侧。

程序范例DemoForm001.cs的设计技巧重点说明如下:

  我们会创建一个名称为Resource的结构来持有每一个资源的名称、类型、值、以及字节:

public struct Resource

{

 private object ValueData;

 private string TypeValue;

 private string NameValue;

 private byte[] BytesValue;

 

 public object Value

 {

  get

  {

   return ValueData;

  }

 }

 ...

 public Resource(

   string Name, string type, object value, byte[] bytes)

 {

  NameValue = Name;

  TypeValue = type;

  ValueData = value;

  BytesValue = bytes;

 }

}

     如下所示,声明一个类级别的泛型集合类Dictionary类型的变量:

private Dictionary<string, Resource> resources;

     第一个类型参数string代表资源的名称,第二个类型参数Resource代表含有每一个资源相关信息的Resource结构。

 

     替菜单项目打开资源文件Click事件处理函数撰写下列程序代码,以便根据用户所选取的资源文件来创建一个ResourceReader对象,接着调用ResourceReader对象的GetEnumerator方法来取得其枚举操作符,然后再通过一个循环去调用枚举操作符的MoveNext方法即可取得各个项目资源。我们会在循环中调用GetResourceData方法来取得资源的类型与二进制信息,然后将我们所读取的每一个资源新增至resource这一个Dictionary对象中,以便稍后能够访问它:

private void openToolStripMenuItem_Click(

  object sender, EventArgs e)

{

 ...

 // 创建一个 Dictionary 对象。

 resources = new Dictionary<string, Resource>();

 ...

 try

 {

  // 根据用户所选取的资源文件来创建

  // 一个 ResourceReader 对象。

  using(ResourceReader myReader =

    new ResourceReader(myFileName))

  {

   // 取得 ResourceReader 对象的枚举操作符

   // 以便循览项目资源。

   IDictionaryEnumerator ReaderWalker =

     myReader.GetEnumerator();

  

   // 读取资源。

   while(ReaderWalker.MoveNext())

   {

    // 枚举操作符的索引键就是资源名称。

    ResourceName = ReaderWalker.Key.ToString();

        

    // GetResourceData 被用来取得资源的

    // 类型与二进制信息。

    myReader.GetResourceData(

      ResourceName, out ResourceType,

      out ResourceBytes);

        

    // 如果可以的话,我们将直接读取资源的值。

    try

    {

     ResourceValue = ReaderWalker.Value;

    }

    catch(FileNotFoundException)

    {

     ResourceValue = "无法解析的类型:" + ResourceType;

    }

    catch(TypeLoadException)

    {

     ResourceValue = "无法解析的类型:" + ResourceType;

    }

    ...

    // 将我们所读取的每一个资源新增

    // resources 这一个 Dictionary 对象中,

    // 以便稍后能够访问它。

    resources.Add(ResourceName,

      new Resource(ResourceName, ResourceType,

      ResourceValue, ResourceBytes));

    ...

    // 将信息新增至 DataGridView 中。

    gridResources.Rows.Add(

      new object[]{ResourceName, ShortType(

      ResourceType), shortVal});

   }

  }

 }

 ...

}

当用户于DataGridView控件中选取某一个资源时,就会将该资源的名称、型别、值、以及字节显示在右侧的各个控件中。

 

 

 

 

 

 

 

 

posted on 2006-09-08 14:35  章立民研究室  阅读(1943)  评论(1编辑  收藏  举报

导航