好像不行.已经将图片(b.png)通过解决方案资源管理器---属性---生成操作--设置为"嵌入的资源".但问题依旧.
是不是我的代码有问题?我在pictureBox1的MouseMove方法中写如下代码:
string path = @"..\b.png";
pictureBox1.Image=Image.FromFile(path);
当时编译没问题.然后新建一个Windows程序测试,将这个控件放入Form中,再编译.当鼠标移到这个控件区域内,会出现这个出错信息:
"未处理的"System.IO.FileNotFoundException"类型的异常出现在system.drawing.dll中
其他信息:..\b.png"是不是怪我的相对路径写的不对呢?

解决方案 »

  1.   

    你可以看看,vs.net自己如何加载资源的:
    添加一个窗体,放一个图片进去,然后在IDE自动生成的初始化代码中看它是怎么加载图片的,照葫芦画瓢...
      

  2.   

    这是一个读取资源的vb函数
    你把它改写成C#就行了
    Private Function GetResource(ByVal Name As String) As String
            Try
                ' Get the current assembly.
                Dim Asm As [Assembly] = [Assembly].GetExecutingAssembly()            ' Resources are named using a fully qualified name.
                Dim strm As Stream = Asm.GetManifestResourceStream(Asm.GetName().Name + "." + Name)            'Read the contents of the embedded file
                Dim reader As StreamReader = New StreamReader(strm)
                Return reader.ReadToEnd()
            Catch ex As Exception        End Try
        End Function
      

  3.   

    转贴一位朋友的文章资源文件类型
    System.Resources 名字空间支持三种资源文件:
    .txt 文件,只能有字符串资源。因为不能被嵌入到 Assembly 中,所以很容易暴露,被客户修改。最大缺点是仅支持字符串资源,所以不推荐使用。 
    .resx 文件,由 XML 组成,可以加入任何资源,包括二进制。同样不能被嵌入到 Assembly 中。在 System.Resources 名字空间中有专用读写的类。VS.NET 创建这种文件然后将其转成 .resources 文件并根据设置将其嵌入到 Assembly 中。 
    .resources 文件,PE 格式,可以加入任何资源。唯一可以被嵌入到 Assembly 的文件,在 System.Resources 名字空间中有专用读写的类。 
     
    调用资源文件的几种方法
    ResourceManager 可以根据不同的 UICulture 设置返回不同的本地资源(这与 World-Ready 程序有关,在此不讨论),我们只需知道调用资源用到它就可以了。接下来让我们看看如何调用每一种:
    .txt 文件:
    不可以直接调用,得先将其转换成 .resources 文件才能使用。(关于如何转换请看"推荐工具")
    .resx 文件:
    可以用 ResXResourceReader 来做读取,但是这种方法不直观,不推荐直接调用 .resx 文件。正确的方法是将其转换成 .resources 文件,然后用 ResourceManager 作读取工作。注意如果是在 VS.NET 中添加的 .resx 文件,那么它们自动被设为 Embedded Resource,转成 .resources 文件后被嵌入到 Assembly 中。
    .resources 文件:
    分成两种情况:
    被嵌入或编译成 Satellite Assembly:
    用 ResourceManager 的各种 constructor 来获得在 Assembly 中的资源。
    单独文件,没被编译或嵌入到 Assembly 中:
    可以用 ResourceManager.CreateFileBasedResourceManager 来获得资源集(ResourceSet),就是所有的资源。 
    特殊情况:
    还有一种特殊情况,那就是当你直接嵌入一资源时,也就是说,不通过一个资源文件而直接将一资源嵌入到 Assembly 中。这可以在 VS.NET 中通过设置一文件的 Build 属性为 Embedded Resource 实现。在这种情况下 ResourceManager 就没有用了,因为它只能获取 .resources 资源文件(在或不在 Assembly 中)。那么如何调用这类的资源呢?不难,我们需要利用一些 Reflection 中的特征。别怕,不是让你再学 Reflection,其实我们只要了解一些 System.Reflection.Assembly 这个类中的一些函数就可以了。有三个相关函数,不过我们只需要 Assembly.GetManifestResourceStream 这个函数。这个函数将一嵌入到 Assembly 中的资源以 stream 的方式返回,而我们可以将这个 stream 转成在 .NET 中可用的对象。比如,如果嵌入资源是一图片,那么我们可以利用 New Bitmap(Stream) 这个 Bitmap 的 constructor 获得这个图片资源的 Bitmap 对象。
    注:在这里仅介绍怎样获得不同的资源的方法,关于怎样用各个类与函数请参看有关文档。