1.Demo.resources的生成
ResourceWriter rw = new ResourceWriter("Demo.resources");//Demo.resources
Image image = Image.FromFile(@"c:\winnt\help\illhelp\ug.gif");
rw.AddResource("WroxLogo",image);//加如一张
rw.Close();2.Demo.resources的使用新建或打开一个项目(比如叫UseResource),将Demo.Resources文件添加到本项目:项目->添加现有项,选择Demo.Resources文件
ResourceManager rm = new ResourceManager ("UseResource.Demo",System.Reflection.Assembly.GetExecutingAssembly());
//UseResource是现在项目的名称,Demo是添加进来的资源文件(Demo.resources)的名称
//C#编译器将自动给加上.Resources来识别资源文件
//Assembly.GetExcutingAssembly()用来取得正在执行的装配件
this.pictureBox1.Image = (Image)rm.GetObject("WroxLogo");//bmp图的GUID

解决方案 »

  1.   

    我使用的Logo就是PictureBox控件的Name啊。
    就应该等于你所说的this.PictureBox1.Image啊。
    我感觉应该不会错啊。你能告诉我rm.GetObject("WroxLogo")中GetObject()这个方法参数的使用方法吗?
      

  2.   

    在Demo.resources的生成过程中不是指定了一个GUID吗,比如你的image的GUID就是WroxLogo啊
    在使用GetObject的时候就是使用的这个GUID.
      

  3.   

    Visual C#资源文件编程--使用资源文件在《Visual C#资源文件编程--创建资源文件》中已经介绍了如何用Visual C#创建资源文件。本文将接着上篇文章的话题来探讨资源文件另外一个问题,在Visual C#如何使用资源文件。在上一篇文章中,我们已经成功的创建了一个名称为"My.resources"的资源文件。这个资源文件中包含有一个图标资源,在文件中的名称为"demo.ico",若干个图片资源和一个字符串资源,在文件中的名称为"MyStr"。我们将以上一篇文章创建的此资源文件为对象,结合一个具体的程序例子来看一下用Visual C#如何使用资源文件。 
    一.本文程序设计和运行的软件环境: 
    (1).微软公司视窗2000服务器版 (2)..Net FrameWork SDK Beta 2 二.程序设计中的一些概念和理论: 
    程序设计时涉及到的概念和理论主要是二种变量的相互转换。这就是二种变量就是所谓的实值类型变量(Value Type Variable)和参考类型变量(Reference Type Variable)。而二者之间的相互转换,在Visual C#中被称为装箱(Boxing)和出箱(Unboxing)。所谓装箱就是把实值类型变量转换成参考类型变量的过程,反之就是出箱。那么什么类型的变量是参考类型的变量,什么类型的变量又是实值类型变量呢?这二者之间有什么区别么?在Visual C#中的参考类型就是泛指这些类型,如:Object、Class、Interface、Delegate、String、Array等。这些类型定义的变量就是参考类型变量。而实值类型就是平常的平常使用的整型、布尔型、枚举型等,由这些类型定义的变量就是实值类型变量。他们之间的最大区别是参考类型变量是指向实体对象的指针,而实值类型变量就是实在的实体对象。由于装箱和出箱是一个概念性很强的操作过程,详细介绍需要很大的篇幅。而这超出了本文探讨的主要范畴。所以本文只介绍和程序相关的操作即出箱。具体的操作步骤,将在下一届结合程序来介绍。 三.程序设计的思路已经重要步骤的解决方法: 
    (1).如何在程序编译的时候中嵌入资源。资源文件和程序是二个独立的文件,要把资源文件嵌入到最后生成的程序中,需要在编译的时候加上"/resource"命令,这个命令可以简写为"/res"。在本文中程序的名称为"use.cs",资源文件的名称为"My.resources",则把资源嵌入程序的编译命令如下: Csc.exe /res:My.resources use.cs (2).如何在程序管理资源文件中的资源: 在.Net FrameWork SDK这提供了一个关于资源文件创建和使用的名称空间--System.Resources。在这个名称空间中有一个Class为ResourceManager,这个Class的主要作用就是管理并使用资源文件。Visual C#是通过这个类来管理并使用嵌入程序中的资源文件中的资源。下列代码就是定义一个ResourceManager类来管理嵌入程序资源文件中的资源: ResourceManager rm = new ResourceManager ( "Images" , Assembly.GetExecutingAssembly ( ) ) ; (3).如何在程序中使用资源文件中的资源: 在上一篇文章中,我们已经了解到在创建资源文件的时候,使用了AddResource ( )方法来加入资源,他的语法中的第一个参数是用户可以定义的字符串,这个字符串就是资源在资源文件的唯一标识,在程序设计中,就是通过这个唯一标识符来使用某个资源的。那么如何在程序中通过这个标识符来得到所需资源?这就要使用到ResourceManager类中的GetObject()和GetString()方法。这二个方法作用是获得指定的资源。下面是这二个方法的语法: object GetSting(String)
    object GetObject(String) 其中的"String"就是资源在资源文件中的那个唯一标识符。细心的读者可能已经注意到,这二个方法的返回值都是一个Object类型的变量,也就是一个参考类型的变量,而在程序中的字符串或者图象等,是一个实值类型变量。这就需要进行转换,而这种转换就是上面所说的装箱和出箱。下列代码是从资源文件中提取字符串、图象和图标资源: 提取字符串资源: String s = ( ( String ) rm.GetString ( "MyStr" ) ) ; 提取图标资源: Icon icoDemo = ( ( Icon ) rm.GetObject ( "demo.ico" ) ) ; 提取图象资源: Image a = ( ( Image ) ( rm.GetObject ( "ok-off.png" ) ) ) ; 四.结合一个程序例子来看一下,资源文件的具体使用方法: 
    下面的程序例子所使用的资源文件是上一篇文章中创建的资源文件"My.resources",程序中定义了三个Lable组件,其中的二个的作用是显示资源文件中图象资源,另外一个的作用是显示资源文件中字符串资源,程序的图标是取自资源文件中的图标资源。下面是程序的源代码: 
      

  4.   

    using System ;
    using System.Drawing ;
    using System.Collections ;
    using System.ComponentModel ;
    using System.Windows.Forms ;
    using System.Data ;
    using System.Resources ;
    using System.Reflection ;
    public class Form1 : Form
    {
    private Label lblOK ;
    private Label lblCancel ;
    private System.ComponentModel.Container components = null ;
    private Label lblResource ;
    public Form1 ( )
    {
    //初始化窗体中的组件
    InitializeComponent ( ) ;
    }
    //清除程序中使用过的资源
    protected override void Dispose ( bool disposing )
    {
    if ( disposing )
    {
    if ( components != null )
    {
    components.Dispose ( ) ;
    }
    }
    base.Dispose ( disposing ) ;
    }
    private void InitializeComponent ( )
    {
    ResourceManager rm = new ResourceManager ( "Images" , Assembly.GetExecutingAssembly ( ) ) ;
    this.lblOK = new Label ( ) ;
    this.lblCancel = new Label ( ) ;
    this.lblResource = new Label ( ) ;
    this.SuspendLayout ( ) ;this.lblOK.BackColor = System.Drawing.Color.White ;
    //使用资源文件中的图象资源
    this.lblOK.Image = ( ( Image ) ( rm.GetObject ( "ok-off.png" ) ) ) ;
    this.lblOK.Location = new System.Drawing.Point ( 24 , 40 ) ;
    this.lblOK.Name = "lblOK" ;
    this.lblOK.Size = new System.Drawing.Size ( 75 , 23 ) ;
    this.lblOK.TabIndex = 0 ;
    this.lblOK.Click += new System.EventHandler ( this.lblOK_Click ) ;
    this.lblOK.MouseEnter += new System.EventHandler ( this.lblOK_MouseEnter ) ;
    this.lblOK.MouseLeave += new System.EventHandler ( this.lblOK_MouseLeave ) ;
    //出箱
    //使用资源文件中的图象资源
    this.lblCancel.Image = ( ( Image ) ( rm.GetObject ( "cancel-off.png" ) ) ) ;
    this.lblCancel.Location = new System.Drawing.Point ( 152 , 40 ) ;
    this.lblCancel.Name = "lblCancel" ;
    this.lblCancel.Size = new System.Drawing.Size ( 75 , 23 ) ;
    this.lblCancel.TabIndex = 1 ;
    this.lblCancel.Click += new System.EventHandler ( this.lblCancel_Click ) ;
    this.lblCancel.MouseEnter += new System.EventHandler ( this.lblCancel_MouseEnter ) ;
    this.lblCancel.MouseLeave += new System.EventHandler ( this.lblCancel_MouseLeave ) ;this.lblResource.Location = new System.Drawing.Point ( 88 , 8 ) ;
    this.lblResource.Name = "lblResource" ;
    this.lblResource.TabIndex = 2 ;
    //出箱
    //使用资源文件中的字符串资源
    this.lblResource.Text = ( ( String ) rm.GetString ( "MyStr" ) ) ;this.AutoScaleBaseSize = new System.Drawing.Size ( 5 , 13 ) ;
    this.ClientSize = new System.Drawing.Size ( 240 , 101 ) ;
    this.Controls.Add ( lblResource ) ;
    this.Controls.Add ( lblCancel ) ;
    this.Controls.Add ( lblOK ) ;
    //出箱 
    //使用资源文件中的图标资源
    Icon icoDemo = ( ( Icon ) rm.GetObject ( "demo.ico" ) ) ;
    this.Icon = icoDemo ;
    this.Name = "Form1" ;
    this.Text = "Visual C#中使用资源文件!" ;
    this.ResumeLayout ( false ) ;}
    static void Main ( )
    {
    Application.Run ( new Form1 ( ) ) ;
    }
    private void lblOK_MouseEnter ( object sender , System.EventArgs e )
    {
    ResourceManager rm = new ResourceManager ( "Images" , Assembly.GetExecutingAssembly ( ) ) ;
    this.lblOK.Image = ( ( Image ) ( rm.GetObject ( "ok-on.png" ) ) ) ;
    }private void lblOK_MouseLeave ( object sender , System.EventArgs e )
    {
    ResourceManager rm = new ResourceManager ( "Images" , Assembly.GetExecutingAssembly ( ) ) ;
    this.lblOK.Image = ( ( Image ) ( rm.GetObject ( "ok-off.png" ) ) ) ;
    }private void lblOK_Click ( object sender, System.EventArgs e )
    {
    ResourceManager rm = new ResourceManager ( "Images" , Assembly.GetExecutingAssembly ( ) ) ;
    this.lblOK.Image = ( ( Image ) ( rm.GetObject ( "ok-down.png" ) ) ) ;
    }private void lblCancel_MouseEnter ( object sender , System.EventArgs e )
    {
    ResourceManager rm = new ResourceManager ( "Images" , Assembly.GetExecutingAssembly ( ) ) ;
    this.lblCancel.Image = ( ( Image ) ( rm.GetObject ( "cancel-onr.png" ) ) ) ;
    }private void lblCancel_MouseLeave ( object sender , System.EventArgs e )
    {
    ResourceManager rm = new ResourceManager ( "Images" , Assembly.GetExecutingAssembly ( ) ) ;
    this.lblCancel.Image = ( ( Image ) ( rm.GetObject ( "cancel-off.png" ) ) ) ;
    }private void lblCancel_Click(object sender, System.EventArgs e)
    {
    ResourceManager rm = new ResourceManager ( "Images" , Assembly.GetExecutingAssembly ( ) ) ;
    this.lblCancel.Image = ( ( Image ) ( rm.GetObject ( "cancel-over.png" ) ) ) ;
    }
    } 五.总结: 
    至此我们已经完成了在Visual C#资源文件方面编程的全部内容,其中的主要内容就是创建资源文件和使用资源文件二大方面,我想通过这二篇文章的介绍,你对资源文件应该有了一个比较全面的认识了吧!